mysqldump 备份

1.  直接备份某个库或表 ,或多个库多个表
mysqldump -uroot -pPassword [database name] > [dump file]
mysqldump -uroot -pPassword  --databases mydatabase1 mydatabase2 mydatabase3 > [dump file]
mysqldump --all-databases> test.dump

2.  备份并压缩
mysqldump -uroot -pPassword --events -B [database name] | gzip > ${date}_${dbname}.sql.gz

3.  跨主机备份
mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

4.  --opt

如果加上--opt参数则生成的dump文件中稍有不同:
建表语句包含drop table if exists tableName
insert之前包含一个锁表语句lock tables tableName write,insert之后包含unlock tables

5.  只备份表结构
mysqldump -uroot -pPassword --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump

6.  恢复表或者数据
mysql [database name] < [backup file name]

7.  mysql  二进制 增量备份
mysql  开启二进制  [mysqld]log-bin=mysql-bin


优化
1.  --all-databases 包含了 mysql 数据库,其中包含了权限的数据,所以我们应该加上 --flush-privileges,在恢复时,权限才能生效;
注意 --all-databases 包括了mysql数据库,但是不会包含 information_schema和performance_schema两个数据库。

2. --delete-master-logs(尽量不要用) 备份之后,会执行 purge logs to 语句。删除了备份之后的master上的binary log. 一般而言,我们不建议随便删除binary log.
我们应该将它们保存起来,而不是直接删除。以防万一,要留条退路。

3.  因为 mysqldump 默认启用了 --lock-tables,所以会导致在备份期间对所有表持有读锁: lock table tb read local,所以所有的update,delete语句会被阻塞。但是select语句和insert语句不会被阻塞。

4.  如果要得到一致性的备份的话,需要使用 --lock-all-tables 或者使用 --single-transaction选项。前者使用了全局读锁,不允许任何修改操作。后者使用了事务的特性来得到一致性备份。

5.  --master-data         使用此选项dump a master replicationserver到dump文件,可用于设立另一台服务器作为master的slave。它会使dump输出包含CHANGE MASTER TO语句,标记dump源的二进制日志坐标(文件名和位置)

如果选项赋值为2,那么CHANGE MASTER TO 语句会被写成一个SQL comment(注释),从而只提供信息;
如果选项赋值为1,那么语句不会被写成注释并且在dump被载入时生效。如果没有指定,默认值为1。

mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --databases db1 db2 db3 > alldb.sql;
--flush-logs  在mysqldump之前 进行日志刷新一次
--routines 用来备份存储过程和函数,触发器默认会备份。

猜你喜欢

转载自www.cnblogs.com/yxqnote/p/20180718_ms.html