Mysql数据恢复

Mysql备份命令

Mysql数据库的备份

1.命令行备份使用工具mysqldump

mysqldump -uroot -proot --database 数据库A 数据库B > D:/备份.sql

2.参数详解
-h127.0.0.1:连接远程数据库
-A:表示全库备份数据和结构
-d:表示备份结构
-t:表示备份数据
--add-drop-table:默认;带有删除表的sql文件
--databases:后边可以追加多个数据库

Mysql还原备份内容

方式一:在命令行中直接进行

mysql -uroot -p123456 数据库名< D:/mydb.sql

方式二:shell脚本,登入mysql系统后执行source

mysql> source /data/mysqlDump/mydb.sql

增量备份

本质上,就是备份二进制文件日志来恢复,重新执行一遍sql;

binlog日志

查看binlog日志是否开启

show variables like 'log_%';

查看binlog所有日志文件名和大小

show binary logs;
-- 或者
show master logs;

±---------------------------±----------±----------+
| Log_name | File_size | Encrypted |
±---------------------------±----------±----------+
| DESKTOP-H5618RO-bin.000026 | 2443762 | No |
| DESKTOP-H5618RO-bin.000027 | 178 | No |
| DESKTOP-H5618RO-bin.000028 | 178 | No |
| DESKTOP-H5618RO-bin.000029 | 178 | No |
| DESKTOP-H5618RO-bin.000030 | 178 | No |
| DESKTOP-H5618RO-bin.000031 | 178 | No |
| DESKTOP-H5618RO-bin.000032 | 4291003 | No |
| DESKTOP-H5618RO-bin.000033 | 9675895 | No |
| DESKTOP-H5618RO-bin.000034 | 57671793 | No |
| DESKTOP-H5618RO-bin.000035 | 212 | No |
| DESKTOP-H5618RO-bin.000036 | 155 | No |
±---------------------------±----------±----------+

查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

mysql> show master status\G;

刷新使用新的日志文件,一般在还原前执行。

mysqladmin -uroot -proot flush-logs
-- 或者
mysql> flush logs

重置binlog日志(等价于删除)

reset master;

查看binlog日志
方式一

mysqlbinlog 'binlog.00003';
-- 可读性不高
 ...............................................................................
         # at 552
         #131128 17:50:46 server id 1  end_log_pos 665   Query   thread_id=11    exec_time=0     error_code=0 ---->执行时间:17:50:46;pos点:665
         SET TIMESTAMP=1385632246/*!*/;
         update zyyshop.stu set name='李四' where id=4              ---->执行的SQL
         /*!*/;
         # at 665
         #131128 17:50:46 server id 1  end_log_pos 692   Xid = 1454 ---->执行时间:17:50:46;pos点:692 
         ...............................................................................

         注: server id 1     数据库主机的服务号;
             end_log_pos 665 pos点
             thread_id=11    线程号

方式二:

mysql> show binlog events in 'binlog.000003';

mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

             选项解析:
               IN 'log_name'   指定要查询的binlog文件名(不指定就是第一个binlog文件)
               FROM pos        指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
               LIMIT [offset,] 偏移量(不指定就是0)
               row_count       查询总条数(不指定就是所有行)

恢复命令的格式

mysqlbinlog [options] file | mysql -uroot -proot_password database_name

常用参数
–start-datetime 开始时间,格式 2020-06-19 18:00:00
–stop-datetime 结束时间,格式同上
–start-positon 开始位置,(需要查看binlog文件)
–stop-position 结束位置,同上

在MySQL5.5以下版本使用mysqlbinlog命令时如果报错,就加上 “–no-defaults”选项

小知识点:初始化mysql容器时,添加参数–binlog-rows-query-log-events=ON。或者到容器当中修改/etc/mysql/my.cnf文件,添加参数binlog_rows_query_log_events=ON,然后重启mysql容器。这样可以把原始的SQL添加到binlog文件当中。

Windows命令脚本

实现功能:分库备份保存。

@echo off
:: mysqldump程序文件位置
set "mysql=C:/Program Files/MySQL/MySQL Server 8.0/bin"
:: 备份保存的位置
set "baseBackupDir=D:\corn\mysql\worsoftx_pm\"
set "yMd=%date:~,4%%date:~5,2%%date:~8,2%"
set "hms=%time:~,2%%time:~3,2%%time:~6,2%"
set daysAgo=3

:: 删除之前的数据,仅保留3天的数据
forfiles /p %baseBackupDir% /s /m *.* /d -%daysAgo% /c "cmd /c del @path"

cd "%mysql%"

for /f "usebackq delims=" %%i in (`mysql -uroot -proot -e "show databases"`) do ( 
    mysqldump -uroot -proot -B --single-transaction --events --master-data=2 %%i >%baseBackupDir%%%i_%yMd%_%hms%.sql 
)
@echo on

参考1:数据库备份命令和Linux环境下的备份脚本
参考2:mysql定时备份任务以及还原
参考3:MySQL的binlog日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值