MySQL的逻辑备份是使用mysqldump
命令(文本备份,而非二进制备份)来从数据库中提取数据,并将结果写到一个纯文本上,就是我们平常用mysqldmin
到处的.sql格式的文件,里面是SQL语句。正是如此,逻辑备份可以在MySQL正在运行时执行,并且可以做到不锁表备份(也可以声明锁定),一般用于数据迁移或者数据量很小时。
备份
下面的命令是直接在linux的cmd里执行,而不是mysql的shell
1 | mysqldump -q --single-transaction -A -u root -p > all.sql # 导出所有数据库到all.sql |
其中mysqldump的常用参数如下:
1 | -B:导出多个数据库 |
注:需要注意的是,在5.5之后,mysqldump默认无法备份performance_schema
这个数据库,但是可以通过—databases
指定名字和--skip-lock-tables
的方式来备份,但是不知道为什么,虽然能备份但是还是会给出错误信息。performance_schema
是新增的mysql的性能监视引擎,所以我认为不备份也行,本来默认也是关闭的,因为数据库迁移或者恢复的时候可以不用看之前的这些的,有什么问题看系统日志就行了,具体的请参见官方手册。
在slave里备份
MySQL5.5之后mysqldump增加了一个参数--dump-slave
,可以在slave端dump数据,并且可以建立新的slave,可大大降低主服务器的压力。
恢复
假设有一个数据库结构的备份文件user.sql,那么可以 在mysql的shell里面执行如下命令
1 | create database User; # 首先得创建一个数据库 |
也可以在创建相应数据后后在linux的shell里执行(在外面创建数据库我没找到方法)
1 | mysql -u root -p user < user.sql |