數據庫備份方案
一. 實驗環境部署
主服務器(mysql master) IP:192.168.1.107 端口3306
從服務器(mysql slave) IP: 192.168.1.127 端口3306
I. 主服務器的操作
1. 關於主服務器的相關配置
1.1 設置server-id值並開啓binlog參數
根據mysql的同步原理:關鍵因素就是binlog日誌。
編輯/etc/my.cnf配置文件,修改和添加相關參數。
[root@localhost ~]# vi/etc/my.cnf
[mysqld]
server-id = 1
log-bin = mysql-bin
備註:
#. 上面兩參數放在my.cnf中的[mysqld]模塊下,否則會出錯;
#. 要先在my.cnf文件中查找相關參數,並按具體要求修改,不存在時添加相關參數,切記,參數不能重複;
#. 修改my.cnf配置後需要重啓數據庫
命令爲:/etc/init.d/mysqld restart,
修改完配置文件,檢查配置後的結果:
[root@localhost ~]# grep -E"server-id|log-bin" /etc/my.cnf
重啓mysql數據庫
[root@localhost ~]#/etc/init.d/mysqld restart
1.2 建立用於主、從數據同步的帳號《rep》
[root@localhost ~]#mysql–uroot–pmyrootpw
Mysql>selectuser();
Mysql>grantreplication slave on *.* to [email protected].%identified by ‘123456’;
備註:
#replication slave:爲mysql同步的必須權限,此處不要授權all
#*.*:表示所有庫所有表,庫也是可以指定具體的庫和表進行復制,如test.test1(test庫的test1表);
#binlog-do-db = test :需要備份數據,多個寫多行,不寫全部都備份
binlog-ignore-db= mysql :不需要備份的數據庫,多個寫多行
#[email protected].%:rep爲同步賬號,192.168.1.%爲授權主機,使用了%表示允許整個192.168.1.0網段以rep用戶訪問;
#identified by "123456": 123456爲密碼,實際環境用複雜密碼
查看用戶權限
Mysql>showgrants for[email protected];
1.3 對主數據庫鎖表只讀:
注:實際環境中,操作主從複製,需要申請停機時間,鎖表會影響業務。
mysql>flush tables with read lock;
注:這個鎖表命令的時間,在不同引擎的情況,會受下面參數的控制,鎖表超過設置時間不操作會自動解鎖;
默認情況下的時長爲:
mysql>show variables like "%timeout%"; 可以查看到默認鎖表時間最大值。
完成後測試是否鎖表成功:打開另一窗口創建一test1表,是不會執行的,證明鎖表不能更新,但可讀,不可寫,因爲是read讀鎖,鎖表主要是爲了導出數據庫文件,從而取得正確的偏移量的值,保證導入從數據庫,數據一致。
1.4 查看主庫狀態
查看主庫狀態,即當前日誌文件名和二進制日誌偏移量
mysql>show master status;
命令顯示的信息要記錄在案,後面的從庫複製時是從這個位置開始的。
1.5 導出主數據庫數據
[root@localhost ~]#mkdir backup
[root@localhost ~]#mysqldump–uroot–pmyrootpw–A –B|gzip>backup/mysql_bak.$(date +%F)sql.gz
注:-A表示備份所有庫, -B表示增加user DB和drop等參數(導庫時會直接覆蓋所有的)。
[root@localhost backup]# ll
爲了確保導庫期間,數據庫沒有數據插入,可以再檢查下主庫狀態信息
[root@localhost backup]# mysql -uroot -pmyrootpw -e "show masterstatus"
注:無特殊情況,binlog文件及位置點是保持不變的。
導庫後,解鎖主庫,恢復可寫;
mysql>unlock tables;
特別提示,有讀者這裏犯迷糊,實際上做從庫的,無論主庫更新多少數據了,最後從庫都會從上面show master status 的位置很快趕上主庫的位置進度的。
1.6 把主庫備份的mysql數據遷移到從庫
[root@localhost ~]# scp backup/[email protected]:/backup
II. 從服務器的操作
1. 關於從服務器的相關配置
1.1 設置server-id值並關閉binlog設置
注:數據庫的server-id在LAN內是唯一的,這裏的server-id要和主庫及其他從庫不同,並註釋掉從庫的binlog參數配置;
編輯/etc/my.cnf配置文件,修改相關的參數設置
master-connect-retry=60 #如果從服務器發現主服務器斷掉,重新連接的時間差
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
server-id = 2
#log-bin = mysql-bin
檢查配置後的結果
[root@localhost ~]#grep–E “server-id|log-bin” /etc/my.cnf
重啓從數據庫
[root@localhost ~]#/etc/init.d/mysqld restart
1.2 還原主庫導出的數據到從庫
解壓主庫備份的數據
[root@localhost backup]# ls
還原主庫解壓出的數據到從庫
[root@localhost backup]#mysql–uroot–pmyrootpw<mysql_bak.2012-07-09.sql
1.3 登錄從庫配置同步參數
mysql>change master to #連接主數據庫
mysql>master_host=”192.168.1.107”, #主庫的IP地址
mysql>master_port=3306, #主庫的端口,從庫的端口可以和主庫不同
mysql>master_user=”rep”, #主庫上建立的用於數據同步的用戶《rep》
mysql>master_password=”123456”, #用戶《rep》的密碼mysql>master_log_file=”mysql-bin.000003”, #是mysql>showmaster status時看到的二進制日誌文件名稱,不能多空格。mysql>master_log_pos=376213; #是mysql>show master status時查看到的二進制日誌偏移量,不能多空格。
1.4 啓動從庫同步開關
啓動從庫同步開關,並查看同步狀態
[root@localhost backup]#mysql–uroot–pmyrootpw–e “start slave”
[root@localhost backup]#mysql–uroot–pmyrootpw–e “show slave status\G”
也可以登錄從庫,在數據庫下面執行相關命令:
mysql>start slave;
mysql>show slave status\G;
判斷搭建是否成功就看如下IO和SQL兩個線程是否顯示爲“yes”狀態
Slave_to_Running:YES #負責從庫去主庫讀取binlog日誌,並寫入從庫中繼日誌中
Slave_SQL_Running:YES #負責讀取並執行中繼日誌中的binlog轉換sql語句後應用到數據庫彙總。
也可以執行命令過濾查看如下:
[root@localhost backup]# mysql -uroot -pmyrootpw -e"show slave status\G" | egrep "IO_Running|SQL_Running"
1.5 測試主從同步
在主庫創建 —>數據庫以及查看
在主庫中創建庫“mytable”用於主從同步:
[root@localhost]#mysql–uroot–pmyrootpw–e “show databases;
[root@localhost]#mysql–uroot–pmyrootpw–e “create database mytable;”
在從庫查看是否主從同步:
[root@localhost]#mysql–uroot–pmyrootpw–e “show databases;
到此!主從數據庫同步成功完成;從數據庫可以實現數據同步。