MySQL數據庫備份和還原
以下方法前景必須是一台用yum源安裝的mysql數據庫沒操作過的嶄新的服務器
*查看是否啟用二進制日志:show master logs;/show binary logs;
*創建一個日志文件專門存放二進制日志:mkdir /data/logbin
*修改配置文件:vim /etc/my.cnf
*設置權限所有者和所屬組:chown mysql.mysql /data/logbin/
*重新啟動mysql服務:systemctl restart mariadb
*查看文件夾是否生成二進制文件:ll /data/logbin(上面是二進制文件,下面是索引)
*再次查看二進制文件是否啟動:show master logs;(默認大小245)|show master status;(position默認大小)
*刷新日志(也是創建日志):flush logs;
*清除指定的二進制日志:purge binary logs to '刪除文件之前的位置';(刪除之前的文件不包括本身)
*刪除所有的二進制文件從新計數:reset master;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
冷備份
*停止服務:systemctl stop mariadb;
*查看目錄:ls /var/lib/mysql/(mysql.sock文件不存在了)
*壓縮數據:tar Jcvf all.bak.tar.xz /var/lib/mysql(打包數據庫)
tar Jcvf logbin.tar.xz(打包二進制文件)
/etc/my.cnf(直接拷貝)
*創建一個目錄存放壓縮數據:mkdir backup
mv all.bak.tar.xz logbin.tar.xz /backup/
cp /etc/my.cnf /backup/
*拷貝到另一台機器上:scp -r /backup/ 192.168.198.17:/data/(本機地址為192.168.198.7)
*打開ip為192.168.198.17的服務器(該機器未安裝過mysql),查看傳送過來的文件:ls /data
*yum安裝數據庫:yum install mariadb-server -y
*查看數據庫:ls /var/lib/mysql(該目錄是空的)
*覆蓋配置文件:cp /data/backup/my.cnf /etc/my.cnf -b(-b是備份)
*查看備份的my.cnf文件:ll /etc/my.cnf(my.cnf~備份文件)
*創建二進制文件,改變所有者和所屬組:mkdri /data/logbin/ chown mysql.mysql /data/logbin/
*解壓二進制文件壓縮包:tar -xvf /data/backup/logbin.tar.xz -C /data/logbin
*進入目錄查看:cd /data/logbin(這是這個目錄不對)mv data/logbin/* .(把數據移出)rm -rf data(刪除data目錄)
*解壓mysql壓縮包然后移動到/var/lib/mysql中:cd /data/backup/(進入) tar xvf all.bak.tar.xz(解壓在當前目錄) cd var/lib/mysql(進入) mv * /var/lib/mysql(移動全部數據到該目錄)
*啟動數據庫:systemctl start mariadb;(啟動之后進入mysql查看即可)
----------------------------------------------------------------------------------------------------------------------------------------------------------
mysqldump
一、mysqldump [options] database [tables](備份一個數據庫此法問題較多不推薦使用)
*創建一個備份目錄:mkdir /data/backup/
*復制整個數據庫成sql語句:mysqldump hellodb > /data/backup/hellodb.sql
*刪除該數據庫:mysql -e 'drop database hellodb';
*還原數據庫得先創建該數據庫:create database hello;(mysqldump恢復數據時不具有自動創建數據庫的功能需要手工創建,創建的新數據庫名字可以改變)
*還原數據:mysql hello < /data/backup/hellodb.sql
*進入數據庫查看是否還原即可
二、mysqldump [options] -B DB1[DB2 DB3...](備份部分數據庫)
*創建一個備份目錄:mkdir /data/backup
*備份數據庫:mysqldump -B hello[后面可以跟多個數據庫] > /data/backup/hello.sql
*刪除數據庫:mysql -e 'drop database hello';
*還原數據:mysql < /data/backup/hello.sql
*進入數據庫查看即可
三、mysqldump [options] -A [options](備份全部數據庫)
*創建一個備份目錄:mkdir /data/backup
*備份數據庫:mysqldump -A > /data/backup/all.sql
*刪除數據庫
*還原數據:mysql < /data/backup/all.sql
*進入數據庫查看即可
四、mysqldump --master-data[=#](二進制日志還原)
*創建備份存放目錄:mkdir /data/backup/
*備份為注釋的CHANGE MASTER TO語句:mysqldump -A --master-data=2 > /data/backup/all.sql
*查看現在的二進制文件:mysql -e 'show master logs';
*隨便寫一條sql語句即可
*再次查看二進制文件會發現文件變大:mysql -e 'show master logs';
*開始刪庫:rm -rf /var/lib/mysql/*(啥也沒了)
*重啟數據庫服務:systemctl restart mariadb(會重新生成mysql文件)
*恢復數據庫時禁止用戶訪問,在配置文件修改:vim /etc/my.cnf 添加:skip_networking 不允許網絡連接或者skip_grant_tables跳過授權表只是服務器選項不是變量
*臨時關閉二進制文件不讓他生效:show variables like 'sql_log_bin'默認是NO,set sql_log_bin=OFF即可
*再次查看二進制文件:show master logs;發現他多生成出幾個文件
*我要還原圖中數據即可(只是我自己),可以查看備份的文件得出依據從哪里開始還原
*進入二進制文件目錄備份丟失的數據,如下圖所示
*導入還原數據:進入mysql輸入source /data/backup/all.sql(先還原全部備份)source /data/backup/inc.sql(還原丟失數據)
*進入數據庫查看即可
*恢復二進制數據記錄:set sql_log_bin=on;
五、恢復誤刪的表
*創建數據備份的目錄:mkdri /data/backup/
*備份二進制數據:mysqldump -A --master-data=2 > /data/backup/all_`date +%F`.sql
*隨便寫一條sql語句
*刪表:drop table students;
*刷新日志,找出丟失的日志文件
*刷新丟失的二進制文件:mysqlbinlog --start-position=245 /data/logbin/mysql-bin.000005 > /data/backup/inc.sql
*打開配置文件vim /data/backup/inc.sql,找到刪除命令注銷
*刪除數據庫:rm -rf /var/bin/mysql/*
*重啟服務器:systemctl restart mariadb
*進入數據庫停止二進制服務:set sql_log_bin=off;
*導入還原數據:進入mysql輸入source /data/backup/all_2019_7_11.sql(先還原全部備份)source /data/backup/inc.sql(還原丟失數據)
*查看數據:執行一條查詢語句(即可成功)