数据库备份方案:
备份方案 | 特点 |
---|---|
全量备份 | 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。数据恢复快。备份时间长 |
增量备份 | 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份。与前一次相比增加和者被修改的文件。这就意味着,第一次增量备份的对象。是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量。备份后所产生的增加和修改的文件,如此类推。没有重复的备份数据。备份时间短。恢复数据时必须按一定的顺序进行 |
差异备份 | 备份上一次的完全备份后发生变化的所有文件。差异备份是指在一次全备份后到进行差异备份的这段时间内。对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全量备份和最后一次差异备份进行恢复。 |
常用的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
删除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服务器的二进制日志功能
[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> 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
mysqlbinlog --stop-position=769 /opt/data/mysql_bin.000004 | mysql -uroot -p123456