------+
| id | name| sex | phone | addr|
+----+----------+------+-------------+----------+
| 1 | yuanfang | 1 | 14465463786 | hangzhou |
| 2 | Andy| 0 | 14465463786 | beijing |
| 3 | peter | 0 | 14465463786 | Hongkong |
+----+----------+------+-------------+----------+
3 rows in set (0.00 sec)
?
?
可以看到,成功的还原到了删除 data-dir 目录之前的状态了。
?
5. mysqldump的 坑
?
如果对 mysqldump 的默认启用的选项不熟悉的话,可能会被默认启用的选项 --add-drop-table 给坑了。因为默认会生成 drop table if exist 语句。可能会导致数据的丢失。 ?--add-drop-database 默认没有启用。如果不想他生成 drop table 语句,可以加入 --skip-add-drop-table选项,或者 --add-ropt-table=0也可以。
?
6. 总结:
?
1)逻辑备份的最佳方法:
?
全备:
?
mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --databases db1 db2 db3 > alldb.sql;
?
mysqldump -uxxx -p --flush-privileges --databases mysql > mysql.sql;
?
如果将mysql也一起备份的话:
?
mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --flush-privileges --all-databases > alldb.sql;
?
有时,还需要加入:--default-character-set=utf8/utf8mb4 ,该选项一般也可以配置在/etc/my.cnf中。
?
增量备份:flush logs; 然后将binary log存储起来即可。
?
2)搭建slave时的最佳选项:
?
mysqldump -uxxx -p --single-transaction --master-data=2 --routines --databases db1 db2 db3 > alldb.sql;
?
搭建slave,没有必要 --flush-logs。当然搭建slave的最佳方式是使用 xtrabackup,物理备份。
?
3)使用mysqldump备份的sql脚本还原的方法:
?
先还原
数据库,然后应用增量日志和最新日志,binary log在应用之前需要使用mysqlbinlog命令来处理。