mysql 数据库还原后没有_MySQL数据库的备份还原至最新状态
模擬數(shù)據庫在某次備份后但未達到下次備份時間中,被意外刪除的數(shù)據
此處恢復hello數(shù)據庫和里面的students表
使用工具:均為mariadb-server自帶
1 mysqldump
2 mysqlbinlog
前提條件:
二進制日志文件必須開啟
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 7674 |
| mysql-bin.000002 | 264 |
| mysql-bin.000003 | 15864234 |
| mysql-bin.000004 | 30379 |
| mysql-bin.000005 | 1038814 |
| mysql-bin.000006 | 264 |
| mysql-bin.000007 | 245 |
+------------------+-----------+
但因為我服務器上有過二進制日志文件,清除掉這些二進制日志
1 MariaDB [hello]> reset master;
MariaDB [hello]> show master logs;+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 245 |
+------------------+-----------+
現(xiàn)在就是個干凈的日志文件
1 cat /etc/my.cnf2 [mysqld]
3 log_bin=/data/logbin/mysql-bin
這里指定了二進制日志文件的位置,實際生產中,建議二進制日志文件放在其他盤上,實在沒有,最好也在其他分區(qū)上
sql_log_bin=ON|OFF:是否記錄二進制日志,默認ON
log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認OFF,表示不啟用二進制日志功能,上述兩項都開啟才可
注釋:MariaDB [hello]>這個表示在數(shù)據庫中執(zhí)行的,沒有這個就表示在shell命令中執(zhí)行的
一、開始全局備份重定向到 /data/下,備份文件后的文件名為all.sql
mysqldump -A --master-data=2 > /data/all.sql
#?注釋:此處-A表示全局備份,--master-data=后面有兩個選項,分別是1和2,1可以用來配合主從復制,此處我沒有配置主從服務器就選擇2就可以
1和2區(qū)別1是命令,而2只是個注釋
1:
2:
mysql -e 'show master logs'
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 245 |
+------------------+-----------+
#?注釋:此處為了看的清除,我清除了之前的二進制日志文件,現(xiàn)在的位置是245(初始的二進制日志文件就是245)
二、切換到hello表,查看表中的數(shù)據,以做后續(xù)參考
MariaDB [mysql]> usehello
MariaDB[hello]> select * fromstudents;+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
| 6 | Shi Qing | 46 | M | 5 | NULL |
| 7 | Xi Ren | 19 | F | 3 | NULL |
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 10 | Yue Lingshan | 19 | F | 3 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 12 | Wen Qingqing | 19 | F | 1 | NULL |
| 13 | Tian Boguang | 33 | M | 2 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 15 | Duan Yu | 19 | M | 4 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 19 | Xue Baochai | 18 | F | 6 | NULL |
| 20 | Diao Chan | 19 | F | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
| 26 | a | 20 | F | NULL | NULL |
| 27 | b | 20 | F | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
三、對數(shù)據進行修改
MariaDB [hello]> insert students (name,age)values('測試1',100);
MariaDB [hello]>insert students (name,age)values('測試2',101);
MariaDB [hello]>insert students (name,age)values('測試3',102);
MariaDB [hello]> update students set classid=111 where stuid=27
備份后修改前:
修改后:
四、開始模擬數(shù)據庫被異常刪除了(實驗環(huán)境這樣,實際生產中千萬不要用這種命令)
rm -rf /var/lib/mysql/*
五、先禁止用戶通過網絡訪問,只能使用本地的套接字來連接
vim /etc/my.cnf
skip-networking
六、開始重啟服務
systemctl restart mariadb
注釋:重新啟動數(shù)據庫,會生成嶄新的數(shù)據庫文件,但里面是沒有數(shù)據的
七、臨時關閉二進制日志文件
MariaDB [(none)]> set sql_log_bin=off;
注釋:還原數(shù)據的生成二進制日志文件沒有什么用,其他用戶此時也不能訪問,此處暫時不用記錄二進制日志文件
八、查看之前的二進制日志文件更新到哪里了
MariaDB [(none)]>show master logs;+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 1175 |
| mysql-bin.000002 | 30379 |
| mysql-bin.000003 | 1038814 |
| mysql-bin.000004 | 245 |
+------------------+-----------+
注釋:此處1,2,3是上次備份之后生成的,需要導出的,而這個4是剛剛啟動時生成的(每次重啟服務之后會重新生成二進制日志)沒有用,可以不用導出
九、其他窗口打開,導出二進制日志文件
mysqlbinlog mysql-bin.000001 > /data/inc.sql
mysqlbinlog mysql-bin.000002 >> /data/inc.sql
mysqlbinlog mysql-bin.000003 >> /data/inc.sql
注釋:此處特地分開寫,后面兩個是追加,mysqlbinlog是導出二進制日志文件的命令
十、回到之前的窗口
把之前備份的文件導入進數(shù)據庫,還有之前生成的二進制日志文件,也導入進數(shù)據庫
MariaDB [test]> source /data/all.sql;
MariaDB [test]> source/data/inc.sql
十一、此時查看上次備份后,新增和修改的數(shù)據是否恢復成功了。
MariaDB [hello]>? show databases;+--------------------+
| Database |
+--------------------+
| information_schema |
| hello |
| mysql |
| performance_schema |
| test |
+--------------------+
注釋:此時hello數(shù)據庫已經恢復成功了
MariaDB [hello]>show tables;+-----------------+
| Tables_in_hello |
+-----------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| testlog |
| toc |
+-----------------+
注釋:此時可以查看到之前的students表恢復成功了
注釋:?通過?select * from students;可以查看到之前修改過的數(shù)據庫文件都恢復成功了。
至此恢復完成
總結
以上是生活随笔為你收集整理的mysql 数据库还原后没有_MySQL数据库的备份还原至最新状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nacos1.3.2连接mysql_Na
- 下一篇: mysql数据库dao模式_古诗MySQ