mysql备份数据方式

https://www.jianshu.com/p/7b43e6481c75

linux mysqldump单独安装:

yum -y install holland-mysqldump.noarch

mysqldump备份简单操作:
mysqldump -h[ip] -P[端口号]  -u[用户名]  -p[密码]  数据库名  表名 >导出的文件名.sql

mysqldump -h[ip] -P[端口号]  -u[用户名]  -p[密码]  数据库名  表名1 表名2 表名3 | gzip >导出的文件名.sql.g

 转了这个后mysqldump和mysql都可以用了。

insert  into xx select 可能或锁原表,备份数据最好用mysqldump.

https://help.aliyun.com/knowledge_detail/41732.html

避免表级锁等待

mysqldump默认会启用lock-tables选项,对要导出的表加表级锁,阻止表上的DML操作。

RDS MySQL实例默认支持的InnoDB和TokuDB引擎均支持事务,建议使用single-transaction选项进行导出,而不要设置lock-all-tables或lock-tables选项。

 
选项名称默认值可选值作用
lock-all-tables FALSE TRUE|FALSE 在数据导出期间设置global read lock,所有库下的所有表在导出期间为只读。自动关闭lock-tables和single-transaction选项。RDS不支持该选项。
lock-tables TRUE TRUE|FALSE 导出期间在导出表上设置表级锁。默认开启。可以通过指定 skip-lock-tables选项来关闭。
single-transaction FALSE TRUE|FALSE 导出操作被放置在一个事务中执行。自动关闭lock-tables选项。

更多表级锁的内容请参见RDS for MySQL表级锁等待

 

1.导出指定表的数据
mysqldump -t database -u username -ppassword --tables table_name1 table_name2 table_name3 >D:db_script.sql

  导出数据不导出结构
  mysqldump -t 数据库名 -uroot -p > xxx.sql

2.导出指定表的结构
mysqldump -d database -u username -ppassword --tables table_name1 table_name2 table_name3>D:db_script.sql

3.导出表的数据及结构
mysqldump  database -u username -ppassword --tables table_name1 table_name2 table_name3>D:db_script.sql

4.若 数据中 ,某些表除外,其余表都需导出
mysqldump -h IP -u username -ppassword --default-character-set=utf8 --database database_name --ignore-table=database_name.table_name1
--ignore-table=database_name.table_name2 --ignore-table=database_name.table_name3 >D:db_script.sql
 
 

mysqldump参数:

-t, --no-create-info
Don't write table creation info.

  -d, --no-data       No row information.

MYSQL数据库因生产原因需要删除大量数据,因数据量太大接近上亿条,用常规delete删除小数据可以,删除几千万大数据量会非常慢,并且不会释放出磁盘空间,还需要optimize或repair来压缩数据表来释放硬盘空间,时间更长,需要几天时间,太慢了!因此采用新建表,导入无需删除的数据,然后删除老表,把新表改名为老表,步骤如下:

1、基于老表新建新表!

SQL
create table sell_new like sell;

2、插入数据(几千万的数据量一定要分批插入,一次50万为最佳,毕竟mysql的数据处理能力有限),可以按ID查询后插入!

SQL
insert into sell_new select * from sell where itemid>500000 and itemid<=5500000;

新表中只保留有用的数据,硬盘空间得以释放!

3、drop删除掉老表

SQL
drop table sell;

4、重命名新表为“sell”

SQL
alter table sell_new rename to sell;

以上是mysql数据库上亿级大数据如何快速删除操作流程!

 

repair table用于修复被破坏的表。
optimize table用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了optimize table命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。
多数时间并不需要运行optimize table,只需在批量删除数据行之后,或定期(每周一次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行。

 

备份脚本

dateStr=`date -d -1day '+%Y%m%d'`
fileName=sql${dateStr}_
DUMPBIN="mysqldump dbname -h xxx -u xxx -p xxx --opt --default-character-set=utf8mb4 --single-transaction --skip-triggers --skip-lock-tables --tables "


tableArr=(
"xxx"
"xxx"


)

for elem in ${tableArr[@]}
do
$DUMPBIN $elem > /data/${fileName}_${elem}.sql &

done

特别注意:

如果mysql的密码带有特殊字符如@,在控制台直接运行要加引号括起来,但是在shell脚本中不用,加了返回会提示密码错误:

mysqldump: Got error: 1045: "Access denied for user 'xxx'@'xxx' (using password: YES)" when trying to connect 

因为在shell脚本中如果我们加了引号会把引号当做密码的一部分。

 

https://www.cnblogs.com/hello-/articles/9600003.html

原文地址:https://www.cnblogs.com/youxin/p/13818438.html