這裏用到了前面的innobackupex:http://www.javashuo.com/article/p-smiiyqpq-ca.htmlphp
mysqldump對於導出10G如下的數據庫或幾個表,仍是適用的,並且更快捷。一旦數據量達到100-500G,不管是對原庫的壓力仍是導出的性能,mysqldump就力不從心了。Percona-Xtrabackup備份工具,是實現MySQL在線熱備工做的不二選擇,可進行全量、增量、單表備份和還原。(但當數據量更大時,可能須要考慮分庫分表,或使用 LVM 快照來加快備份速度了)mysql
2.2版本 xtrabackup 能對InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份,innobackupex經過perl封裝了一層xtrabackup,對MyISAM的備份經過加表讀鎖的方式實現。2.3版本 xtrabackup 命令直接支持MyISAM引擎。nginx
XtraBackup(包含innobackupex)優點 :sql
show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: No 可見是Slave不一樣步
方法一:忽略錯誤後,繼續同步
該方法適用於主從庫數據相差不大,或者要求數據能夠不徹底統一的狀況,數據要求不嚴格的狀況 解決:
stop slave;
#表示跳過一步錯誤,後面的數字可變
set global sql_slave_skip_counter =1;
start slave;
以後再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 數據庫
方法二:厲害了從新搞一遍,主要是數據的同步該方法適用於主從庫數據相差較大,或者要求數據徹底統一的狀況 服務器
1.兩臺mysql均可讀寫,互爲主備,默認只使用一臺(masterA)負責數據的寫入,另外一臺(masterB)備用;架構
2.masterA是masterB的主庫,masterB又是masterA的主庫,它們互爲主從;ide
3.兩臺主庫之間作高可用,能夠採用keepalived等方案(使用VIP對外提供服務);工具
4.全部提供服務的從服務器與masterB進行主從同步(雙主多從);性能
5.建議採用高可用策略的時候,masterA或masterB均不因宕機恢復後而搶佔VIP(非搶佔模式);
這樣作能夠在必定程度上保證主庫的高可用,在一臺主庫down掉以後,能夠在極短的時間內切換到另外一臺主庫上(儘量減小主庫宕機對業務形成的影響),減小了主從同步給線上主庫帶來的壓力;
可是也有幾個不足的地方:
1.masterB可能會一直處於空閒狀態(能夠用它當從庫,負責部分查詢);
2.主庫後面提供服務的從庫要等masterB先同步完了數據後才能去masterB上去同步數據,這樣可能會形成必定程度的同步延時;
masterA自增加ID: vi /etc/my.cnf server-id = 1 auto_increment_offset = 1 auto_increment_increment = 2 #奇數ID log-bin = mysql-bin #打開二進制功能,MASTER主服務器必須打開此項(雙主) log-slave-updates = true #將複製事件寫入binlog,一臺服務器既作主庫又作從庫此選項必需要開啓 masterB自增加ID: vi /etc/my.cnf server-id = 2 auto_increment_offset = 2 auto_increment_increment = 2 #偶數ID log-bin = mysql-bin #打開二進制功能,MASTER主服務器必須打開此項 log-slave-updates = true
添加主從同步帳戶
masterA上: mysql> grant replication slave on *.* to 'repl'@'192.168.10.12' identified by '123456'; mysql> flush privileges; masterB上: mysql> grant replication slave on *.* to 'repl'@'192.168.10.11' identified by '123456'; mysql> flush privileges; 查看主庫的狀態 masterA上: mysql> show master status; masterB上: mysql> show master status;
配置同步信息
masterA上: mysql> change master to master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437; mysql> start slave; mysql> show slave status\G; 顯示有以下狀態則正常: Slave_IO_Running: Yes Slave_SQL_Running: Yes masterB上: #本人是測試環境,能夠保證沒數據寫入,不然須要的步驟是:先masterA鎖表-->masterA備份數據-->masterA解鎖表 -->masterB導入數據-->masterB設置主從-->查看主從 複製代碼 mysql> change master to master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120; start slave; mysql> show slave status\G; 顯示有以下狀態則正常: Slave_IO_Running: Yes Slave_SQL_Running: Yes
一、安裝lua (mysql-proxy須要使用lua腳本進行數據轉發) #tar zxvf lua-5.1.4.tar.gz #cd lua-5.1.4 #vi Makefile,修改INSTALL_TOP= /usr/local/lua #make posix #make install 二、安裝libevent #tar zxvf libevent-2.0.8-rc.tar.gz #cd libevent-2.0.8-rc #./configure --prefix=/usr/local/libevent #make && make install 三、安裝check #tar zxvf check-0.9.8.tar.gz #cd check-0.9.8 #./configure && make && make install 四、安裝mysql客戶端 #tar zxvf mysql-5.0.92.tar.gz #cd mysql-5.0.92 #./configure --without-server && make && make install 五、設置環境變量 (安裝mysql-proxy所需變量) #vi /etc/profile export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" export CPPFLAGS="-I/usr/local/libevent/include" export CFLAGS="-I/usr/local/libevent/include" # source /etc/profile 六、安裝mysql-proxy #tar zxvf mysql-proxy-0.6.0.tar.gz #cd mysql-proxy-0.6.0 # ./configure --prefix=/usr/local/mysql-proxy --with-mysql --with-lua #make && make install 七、啓動mysql-proxy 本次對兩臺數據庫實現了讀寫分離;mysql-master爲可讀可寫,mysql-slave爲只讀 #/usr/local/mysql-proxy/sbin/mysql-proxy --proxy-backend-addresses=192.168.1.201:3306 --proxy-read-only-backend-addresses=192.168.1.202:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua & 注:若是正常狀況下啓動後終端不會有任何提示信息,mysql-proxy啓動後會啓動兩個端口4040和4041,4040用於SQL轉發,4041用於管理mysql-proxy。若有多個mysql-slave能夠依次在後面添加