mysql数据库备份与恢复
2022/7/30 2:24:57
本文主要是介绍mysql数据库备份与恢复,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- mysql数据库备份与恢复
- 数据库常用备份方案
- mysql备份工具mysqldump
- mysql数据恢复
- 差异备份与恢复
- mysql差异备份
- mysql差异备份恢复
- 二进制日志转换文本文件:
- 根据时间恢复:
- 根据操作id号恢复:
mysql数据库备份与恢复
数据库常用备份方案
数据库备份方案:
- 全量备份
- 增量备份
- 差异备份
备份方案 | 特点 |
---|---|
全量备份 | 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。数据恢复快。备份时间长 |
增量备份 | 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份。与前一次相比增加和者被修改的文件。这就意味着,第一次增量备份的对象。是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量。备份后所产生的增加和修改的文件,如此类推。没有重复的备份数据。备份时间短。恢复数据时必须按一定的顺序进行 |
差异备份 | 备份上一次的完全备份后发生变化的所有文件。差异备份是指在一次全备份后到进行差异备份的这段时间内。对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全量备份和最后一次差异备份进行恢复。 |
mysql备份工具mysqldump
常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
备份course表
[root@localhost ~]# mysqldump -uroot -p123456 ljl0 course > course$(date '+%Y%m%d%H%M%S').sql [root@localhost ~]# ls anaconda-ks.cfg course20220728215908.sql
备份ljl0数据库
[root@localhost ~]# mysqldump -uroot -p123456 --databases ljl0 > ljl$(date '+%Y%m%d%H%M%S').sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# ls anaconda-ks.cfg course20220728215908.sql ljl20220728220059.sql
备份所有
[root@localhost ~]# mysqldump -uroot -p123456 --all-databases > all$(date '+%Y%m%d%H%M%S').sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# ls all20220728220324.sql course20220728215908.sql anaconda-ks.cfg ljl20220728220059.sql
mysql数据恢复
删除ljl0数据库
mysql> drop database ljl0; Query OK, 2 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
恢复ljl0数据库
[root@localhost ~]# mysql -uroot -p123456 <ljl20220728220059.sql [root@localhost ~]# mysql -uroot -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | ljl0 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec)
删除ljl0数据库下的course表
mysql> use ljl0 mysql> drop table course; Query OK, 0 rows affected (0.10 sec) mysql> show tables; +----------------+ | Tables_in_ljl0 | +----------------+ | students | +----------------+ 1 row in set (0.00 sec)
恢复course表
mysql> use ljl0 mysql> source course20220728215908.sql Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> show tables; +----------------+ | Tables_in_ljl0 | +----------------+ | course | | students | +----------------+ 2 rows in set (0.00 sec)
删除整个数据库
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | ljl0 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> drop database ljl0; Query OK, 2 rows affected (0.01 sec)
恢复整个数据库
[root@localhost ~]# mysql -uroot -p123456 < all20220728220324.sql [root@localhost ~]# mysql -uroot -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | ljl0 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.01 sec)
差异备份与恢复
mysql差异备份
开启MySQL服务器的二进制日志功能
[root@localhost ~]# vim /etc/my.cnf [mysqld] basedir = /usr/local/mysql datadir = /opt/data socket = /tmp/mysql.sock port = 3306 pid-file = /opt/data/mysql.pid user = mysql skip-name-resolve sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION server-id=1 log-bin=mysql_bin [root@localhost ~]# service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS!
完全备份
[root@localhost ~]# mysqldump -uroot -p123456 --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > all1-$(date '+%Y%m%d%H%M%S').sql
增加新内容
[root@localhost ~]# mysql -uroot -p123456 mysql> use ljl0; mysql> insert course(course_name) values('english'),('math'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 1 | java | | 2 | mysql | | 3 | python | | 4 | go | | 5 | c++ | | 6 | english | | 7 | math | +----+-------------+ 7 rows in set (0.00 sec)
mysql差异备份恢复
模拟误删数据
mysql> drop database ljl0; Query OK, 2 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
刷新创建新的二进制日志
[root@localhost ~]# cd /opt/data/ [root@localhost data]# ll -rw-r-----. 1 mysql mysql 589 Jul 28 22:32 mysql_bin.000002 -rw-r-----. 1 mysql mysql 19 Jul 28 22:24 mysql_bin.index [root@localhost data]# cat mysql_bin.index ./mysql_bin.000002
[root@localhost data]# mysqladmin -uroot -p123456 flush-logs -rw-r-----. 1 mysql mysql 636 Jul 28 22:36 mysql_bin.000002 -rw-r-----. 1 mysql mysql 154 Jul 28 22:36 mysql_bin.000003 -rw-r-----. 1 mysql mysql 38 Jul 28 22:36 mysql_bin.index [root@localhost data]# cat mysql_bin.index ./mysql_bin.000002 ./mysql_bin.000003
恢复完全备份
[root@localhost ~]# mysql -uroot -p123456 < all1-20220728222421.sql [root@localhost ~]# mysql -uroot -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | crouce | | ljl0 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> use ljl0; mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 1 | java | | 2 | mysql | | 3 | python | | 4 | go | | 5 | c++ | +----+-------------+ 5 rows in set (0.00 sec)
恢复差异备份
[root@localhost data]# ll -rw-r-----. 1 mysql mysql 636 Jul 28 22:36 mysql_bin.000002 -rw-r-----. 1 mysql mysql 858142 Jul 28 22:39 mysql_bin.000003 -rw-r-----. 1 mysql mysql 38 Jul 28 22:36 mysql_bin.index [root@localhost data]# mysql -uroot -p123456 mysql> show binlog events in 'mysql_bin.000002'; mysql> show binlog events in 'mysql_bin.000002'; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql_bin.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.37-log, Binlog ver: 4 | | mysql_bin.000002 | 123 | Previous_gtids | 1 | 154 | | | mysql_bin.000002 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql_bin.000002 | 219 | Query | 1 | 291 | BEGIN | | mysql_bin.000002 | 291 | Table_map | 1 | 343 | table_id: 140 (ljl0.course) | | mysql_bin.000002 | 343 | Write_rows | 1 | 401 | table_id: 140 flags: STMT_END_F | | mysql_bin.000002 | 401 | Xid | 1 | 432 | COMMIT /* xid=489 */ | | mysql_bin.000002 | 432 | Anonymous_Gtid | 1 | 497 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql_bin.000002 | 497 | Query | 1 | 589 | drop database ljl0 | | mysql_bin.000002 | 589 | Rotate | 1 | 636 | mysql_bin.000003;pos=4 | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 10 rows in set (0.00 sec)
[root@localhost data]# mysqlbinlog --stop-position=497 /opt/data/mysql_bin.000002 |mysql -uroot -p123456 [root@localhost data]# mysql -uroot -p123456 mysql> use ljl0; mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 1 | java | | 2 | mysql | | 3 | python | | 4 | go | | 5 | c++ | | 6 | english | | 7 | math | +----+-------------+ 7 rows in set (0.01 sec)
模拟删除多条
mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 1 | java | | 2 | mysql | | 3 | python | | 4 | go | | 5 | c++ | +----+-------------+ 5 rows in set (0.00 sec) mysql> delete from course where id =1 or id =2 or id = 3 or id = 4; Query OK, 4 rows affected (0.01 sec) mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 5 | c++ | +----+-------------+ 1 row in set (0.00 sec) mysql> insert course(course_name) values('das'),('hehe'),('haha'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 5 | c++ | | 6 | das | | 7 | hehe | | 8 | haha | +----+-------------+ 4 rows in set (0.00 sec)
刷新新的二进制日志
[root@localhost ~]# cd /opt/data/ [root@localhost data]# ll -rw-r-----. 1 mysql mysql 734 Jul 28 23:20 mysql_bin.000002 -rw-r-----. 1 mysql mysql 19 Jul 28 23:17 mysql_bin.index [root@localhost data]# mysqladmin -uroot -p123456 flush-logs -rw-r-----. 1 mysql mysql 781 Jul 28 23:22 mysql_bin.000002 -rw-r-----. 1 mysql mysql 154 Jul 28 23:22 mysql_bin.000003 -rw-r-----. 1 mysql mysql 38 Jul 28 23:22 mysql_bin.index
导出为文本文件
[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000004 > /opt/mysql_bin004.txt [root@localhost data]# cat /opt/mysql_bin004.txt
恢复完全备份
[root@localhost data]# mysql -uroot -p123456 < /root/all1-20220728222421.sql mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 1 | java | | 2 | mysql | | 3 | python | | 4 | go | | 5 | c++ | +----+-------------+ 5 rows in set (0.00 sec)
恢复差异备份
mysql> show binlog events in 'mysql_bin.000002'; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql_bin.000002 | 4 | Format_desc | 10 | 123 | Server ver: 5.7.37-log, Binlog ver: 4 | | mysql_bin.000002 | 123 | Previous_gtids | 10 | 154 | | | mysql_bin.000002 | 154 | Anonymous_Gtid | 10 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql_bin.000002 | 219 | Query | 10 | 291 | BEGIN | | mysql_bin.000002 | 291 | Table_map | 10 | 343 | table_id: 140 (ljl0.course) | | mysql_bin.000002 | 343 | Delete_rows | 10 | 419 | table_id: 140 flags: STMT_END_F | | mysql_bin.000002 | 419 | Xid | 10 | 450 | COMMIT /* xid=487 */ | | mysql_bin.000002 | 450 | Anonymous_Gtid | 10 | 515 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | mysql_bin.000002 | 515 | Query | 10 | 587 | BEGIN | | mysql_bin.000002 | 587 | Table_map | 10 | 639 | table_id: 140 (ljl0.course) | | mysql_bin.000002 | 639 | Write_rows | 10 | 703 | table_id: 140 flags: STMT_END_F | | mysql_bin.000002 | 703 | Xid | 10 | 734 | COMMIT /* xid=488 */ | | mysql_bin.000002 | 734 | Rotate | 10 | 781 | mysql_bin.000003;pos=4 | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 13 rows in set (0.00 sec)
[root@localhost data]# mysqlbinlog --stop-position=734 /opt/data/mysql_bin.000002 |mysql -uroot -p123456 mysql> select * from course; +----+-------------+ | id | course_name | +----+-------------+ | 5 | c++ | | 6 | das | | 7 | hehe | | 8 | haha | +----+-------------+ 4 rows in set (0.00 sec)
二进制日志转换文本文件:
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000004 > /opt/mysql_bin004.txt
根据时间恢复:
mysqlbinlog --stop-datetime='22-07-28 15:42:44' /opt/data/mysql_bin.000004 | mysql -uroot -p123456
根据操作id号恢复:
mysqlbinlog --stop-position=769 /opt/data/mysql_bin.000004 | mysql -uroot -p123456
这篇关于mysql数据库备份与恢复的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南