mysql备份

mysqldump

备份库

mysql数据库自带了一个备份命令mysqldump使用如下

mysqldump -u(用户名) -p(数据库密码) (数据库名)>备份的文件名
mysqldump -u(用户名) -p(数据库密码) (数据库名) -B >备份的文件名 #不用去创建数据库了
mysqldump -u(用户名) -p(数据库密码) (数据库名)|gzip -B >备份的文件名.sql.gz #备份的时候进行压缩

-B的作用是可以备份多个数据库这样也即是说会将数据库名也备份一份进去这样就不用每次都去先创建数据库再导入数据了,在后面多添加几个数据库名,可以将数据库全部导出备份

之后可以用drop命令删除当前的数据库

drop database (数据库名);

恢复

create database (数据库名)
mysql -u(用户名) -p(密码) 数据库名 < (备份文件的路径)

mysql -u(用户名) -p(密码)  < (备份文件的路径) #-B恢复就不用加文件名也不用创建数据库

mysqldump命令备份数据的过程实际上就是把数据从mysql库里以逻辑的sql语句直接输出或者生成备份的文件的过程

备份表

mysqldump -u(用户名) -p(密码) 数据库名 表名 >备份的文件名

恢复备份

mysql -u(用户名) -p(密码) 数据库名 < (备份文件的路径)

表结构备份

mysqldump -u(用户名) -p(数据库密码) (数据库名) -d>备份的文件名 #备份整个库的表
mysqldump -u(用户名) -p(数据库密码) (数据库名) (表名) -d>备份的文件名 #备份整个表

备份整个库

整库备份

mysqldump -(用户名) -p(密码) -A -B --event|gizp >(备份文件的路径)

关键参数

--events     #==》转储事件,把events警告事件取消显示
-A , --all-databases      #==》备份所有数据库
-F , --flush-logs     #==》刷新binlog日志
--master-data  #==》增加binlog日志文件名及对应的位置记录点,设置=2的时候会给前面加上注释,默认为1
写了这个参数就不用每次去用-F删除之前的binlog日志了
-t 只备份表数据
--compact   去掉输出注释,适合调试输出使用,生产不可用
-l            指定表上锁
-x , --lock-all-tables        #==》所有表上锁
--master-data  #==》增加binlog日志文件名及对应的位置记录点
--master-data=1   #==》不注释位置记录点信息,从库会使用到
--master-data=2 #==》注释位置记录点信息
single-transaction  #==》应答innodb事务数据库备份
--flush-privileges  #==》刷新数据库更新

innodb在备份的时候通常启用选项--single-transaction来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为重复读,以确保本次会话dump时,不会看到其他会话已经提交了的数据

myisam

mysqldump -u(用户名) -p -A -B --master-data=2 -x|gzip>(备份路径)

innodb

mysqldump -u(用户名) -p -A -B --master-data=2 --single-transaction >(备份路径)

恢复

也可以用source来进行恢复进入mysql的命令行

system ls (备份路径) #先查看一下备份的文件
source (备份文件路径)

解压

mysqlbinlog

查看binlog的存储位置

show variables like 'log_%'

查看所有binlog日志列表

show master logs

刷新log日志,自此刻开始产生一个新编号的binlog日志文件

flush logs;

每当mysql重启的时候,会自动执行此命令刷新binlog日志,在mysqldump备份数据时加-F选项也会刷新binlog日志

重置,清空所有binlog日志

reset master;

基于位置的增量恢复

mysqlbinlog 开始的文件名 --start-position=(开始的位置) --stop-position=(结束的位置) -r (备份的sql文件)
mysqlbinlog 开始的文件名 --start-datetime=(时间) --stop-datetime=(结束的时间) -r (备份的sql文件)

如果只给开始不给结束,那么就是从开始到最后为止

如果只给结束不给开始,那么就是从最开头的结束为止

Last modification:November 17, 2023
如果觉得我的文章对你有用,请随意赞赏