1. 程式人生 > >使用mysqldump工具對mysql數據庫實現完全備份和還原

使用mysqldump工具對mysql數據庫實現完全備份和還原

遠程主機 數據庫服務 查看sql 誤刪 數據文件 磁盤 entos one 備份工具

1>啟動數據庫二進制日誌

查看sql_log_bin是否啟用

MariaDB [(none)]> show variables like ‘sql_log_bin‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

在會話時使用set sql_log_bin=ON;開啟二進制日誌

修改配置文件
指定二進制日誌的路徑(二進制日誌文件不應該與數據文件放在同一磁盤)

[[email protected] ~]#vim /etc/my.cnf
[mysqld]
log_bin=/data/mysql/bin/mysql-bin

重啟數據庫服務

[[email protected] ~]#systemctl restart mariadb

2>完全備份

創建備份數據存放路徑(最好存放在遠程主機多份)

[[email protected] ~]#mkdir /data/backup

使用備份工具mysqldump

[[email protected] ~]#mysqldump -A --single-transaction --master-data=2 | xz > /data/backup/all_`date +%F`.sql.xz
[[email protected] ~]#ls -l /data/backup/
total 104
-rw-r--r-- 1 root root 105844 May  6 19:40 all_2019-05-06.sql.xz

3>修改數據庫

Teachers表插入兩條數據

MariaDB [hellodb]> insert teachers (name,age,gender)value(‘zhangshan‘,42,‘M‘);
Query OK, 1 row affected (0.01 sec)

MariaDB [hellodb]> insert teachers (name,age,gender)value(‘lisi‘,33,‘F‘);
Query OK, 1 row affected (0.00 sec)

刪除students表

MariaDB [hellodb]> drop table students;
Query OK, 0 rows affected (0.01 sec)

Teachers表插入一條數據

MariaDB [hellodb]> insert teachers (name,age,gender)value(‘wangwu‘,33,‘F‘);
Query OK, 1 row affected (0.01 sec)

4>破換數據庫

[[email protected] ~]#rm -rf /var/lib/mysql/*

5>還原

查看二進制文件列表

[[email protected] ~]#ll /data/mysql/bin/
total 1072
-rw-rw---- 1 mysql mysql     288 May  6 18:51 mysql-bin.000002
-rw-rw---- 1 mysql mysql     288 May  6 18:52 mysql-bin.000003
-rw-rw---- 1 mysql mysql     264 May  6 19:10 mysql-bin.000004
-rw-rw---- 1 mysql mysql    1119 May  6 20:59 mysql-bin.000005
-rw-rw---- 1 mysql mysql   30373 May  6 20:59 mysql-bin.000006
-rw-rw---- 1 mysql mysql 1038814 May  6 20:59 mysql-bin.000007
-rw-rw---- 1 mysql mysql     245 May  6 20:59 mysql-bin.000008
-rw-rw---- 1 mysql mysql     231 May  6 20:59 mysql-bin.index

重啟數據庫

[[email protected] ~]#systemctl restart mariadb 

臨時關閉二進制日誌記錄

MariaDB [(none)]> show variables like ‘sql_log_bin‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> set sql_log_bin=OFF;
Query OK, 0 rows affected (0.00 sec)

使用備份文件還原數據庫
解壓

[[email protected] ~]#ls /data/backup/all_2019-05-06.sql.xz 
/data/backup/all_2019-05-06.sql.xz
[[email protected] ~]#xz -d /data/backup/all_2019-05-06.sql.xz
[[email protected] ~]#ll /data/backup/
total 512
-rw-r--r-- 1 root root 521990 May  6 19:40 all_2019-05-06.sql

還原

MariaDB [test]> source /data/backup/all_2019-05-06.sql

查看備份時二進制日誌的記錄點,從此位置後的日誌導出到inc.sql

[[email protected] ~]#vim /data/backup/all_2019-05-06.sql
-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000005‘, MASTER_LOG_POS=245; 
//此條語句記錄了數據庫完全備份時二進制日誌的記錄點

將二進制日誌mysql-bin.000005的245之後的日誌導出到inc.sql文件裏

[[email protected] ~]#mysqlbinlog --start-position=245 /data/mysql/bin/mysql-bin.000005 > inc.sql

由於之前誤刪除了students表,所以要刪除或註釋inc.sql裏面的刪除students表操作的語句

[[email protected] ~]#vim  inc.sql
#DROP TABLE `students` /* generated by server */

使用二進制日誌恢復完全備份後的數據更新

MariaDB [hellodb]> source inc.sql

開啟二進制日誌

MariaDB [hellodb]> set sql_log_bin=ON;

最後測試是否還原了數據庫

MariaDB [hellodb]> show tables;
MariaDB [hellodb]> select * from teachers;

使用mysqldump工具對mysql數據庫實現完全備份和還原