二,配置mysql主從同步 1,生產伺服器A配置: 開啟A伺服器mysqlbinlog,設置id號並重新啟動:
- 生產伺服器: A:192.168.1.10 : mysql版本 5.1.34
- 生產伺服器: B:192.168.1.11 : mysql版本 5.1.34
- 備份伺服器: C:192.168.1.20 : mysql版本 5.1.34
2:設置備份伺服器C同步A伺服器my的用戶名密碼 創建帳號:(A 伺服器上操作)
- vim /etc/my.cnf
- log-bin = binlog
- server-id = 1
- #service mysql restart
3,將A伺服器資料庫數據導出,傳輸到C伺服器上,並導入C伺服器資料庫 4,配置C伺服器的my.cnf 加入以下參數.並啟動C伺服器上的資料庫
- mysql>GRANT super,REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
- mysql>flush privileges;
- (註:slave 及 123456分別為用戶名密碼)
5,查看A伺服器日誌及偏移量
- vim /etc/my.cnf
- server-id = 2 #此處id應與主伺服器id不同
- master-host=192.168.1.10
- master-user=slave
- master-password='123456'
- master-port=3306
- relay-log=relay-bin
- relay-log-index =relay-bin
- #service mysql start
這裡面顯示日誌文件為 binlog.00629,偏移量為 1495278 (每台伺服器都不一樣,以自己伺服器為準) 6,在備份伺服器C上的mysql服務裡面運行以下命令,同步兩台伺服器
- mysql>show master status\G 輸出如下圖
- mysql>stop slave;
- mysql>reset slave;
- mysql>change master to master_host='192.168.1.10', master_user='slave',master_password='123456',master_log_file=’binlog.00629',master_log_pos=1495278;
- mysql>slave start;
啟動mysql slave
查看是否正常運行
- mysql>show slave status\G
如果
那說明slave 是正常運行的 執行這些程序后,從伺服器應連接主伺服器,並同步生產伺服器A上面的任何更新. 三,啟動一個新的mysql 服務, 這裡簡述為mysql2,作為生產伺服器B的slave 1,拷貝my.cnf 作為mysql2配置文件,並作相應修改
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
2,先初始化一下資料庫
- #cp /etc/my.cnf /etc/my2.cnf
- vim /etc/my2.cnf
- [client]
- port = 3307
- socket = /tmp/mysql2.sock
- [mysqld]
- user = mysql
- port = 3307
- socket = /tmp/mysql2.sock
- server-id = 3 #此處id應與主伺服器id不同
- master-host=192.168.1.11
- master-user=slave
- master-password='123456'
- master-port =3306
- relay-log=relay-bin
- relay-log-index=relay-bin
3,啟動mysql2伺服器
- /usr/local/webserver/mysql/bin/mysql_install_db --datadir=/home/mysql/var2 --user=mysql
這樣.我們又啟動了一個新的mysql進程.
- /usr/local/webserver/mysql2/bin/mysqld_safe --defaults-file=/etc/my2.cnf --basedir=/usr/local/webserver/mysql --datadir=/home/mysql/var2 --user=mysql&
- 參數簡介
- --defaults-file=/etc/my2.cnf #指定配置文件路徑
- --basedir=/usr/local/webserver/mysql #指定程序文件路徑
- --datadir=/home/mysql/var2 #指定數據文件路徑
- --user=mysql& #指定啟動用戶
按照上面的步驟,把 B 伺服器的數據導入到C伺服器的mysql2下,並啟動slave. 注意:如果生產伺服器里的表有innodb格式的,這樣的方法不行,必須重新編譯一個mysql伺服器啟動, 四:編寫腳本備份C伺服器中的數據 1,編寫腳本
- 進入mysql2方式為 mysql --socket=/tmp/mysql2.sock –p密碼
- 導入數據至mysql2方式為: mysqldump --socket=/tmp/mysql2.sock -p密碼
- #vim /home/alldbbak/dbbak.sh
- #! /bin/bash
- for db in `ls /home/mysql/var/`
- do
- if [ -d /home/mysql/var/$db ];then
- mysqldump $db >/home/alldbbak/dbcache/$db.sql
- fi
- done
- cd /home/alldbbak/dbcache/
- tar -cvzf 192.168.1.10.`date "%Y%m%d"`.tar *
- find /home/alldbbak/ -name "*.tar" -mtime 5 -exec rm -rf {} \;
- mv *.tar ..
- rm -rf /home/alldbbak/dbcache/*.sql
- cd /home/alldbbak/
- for db in `ls /home/mysql/var2/`
- do
- if [ -d /home/mysql/var2/$db ];then
- mysqldump --socket=/tmp/mysql2.sock $db >/home/alldbbak/dbcache/$db.sql
- fi
- done
- cd /home/alldbbak/dbcache/
- tar -cvzf 192.168.1.11.`date "%Y%m%d"`.tar *
- find /home/alldbbak/ -name "*.tar" -mtime 5 -exec rm -rf {} \;
- mv *.tar ..
- rm -rf /home/alldbbak/dbcache/*.sql
- cd /home/alldbbak/
- done
腳本這塊解釋請參照《企業級數據備份,rsync加shell編程,實現增量備份》
2, 定時運行 五:編寫腳本檢查slave伺服器狀態,並在slave同步同出錯后重新同步 1, 先寫好sock文件與ip對應關係
- #crontab –e
- 00 07 * * * sh /home/alldbbak/dbbak.sh #每天早上7點運行
2, 編寫檢查腳本
- #vim /home/alldbbak/duiyin
- /tmp/mysql.sock 192.168.1.10
- /tmp/mysql2.sock 192.168.1.11
腳本解釋
- #vim /home/alldbbak/autocheck.sh
- #! /bin/bash
- for i in `seq 1 2`
- do
- server=`sed -n "$i"p /home/alldbbak/duiyin|awk '{print $2}'`
- socket=`sed -n "$i"p /home/alldbbak/duiyin|awk '{print $1}'`
- for m in `mysql --socket=$socket -e "show slave status\G"|grep Running|awk '{print $2}'|sed 'N;s/\n//g'`
- do
- if [ $m != "YesYes" ];then
- pos=(`mysql -h$server –p密碼 -e "show master status\G"|sed -n '2,3'p|awk '{print $2}'|sed 'N;s/\n/ /g'`)
- mysql --socket=$socket <<EOF
- slave stop;
- reset slave;
- change master to master_host="$server", master_user='slave',master_password='123456',master_log_file="${pos[0]}",master_log_pos=${pos[1]};
- slave start;
- EOF
- sleep 2
- yes=`mysql --socket=$socket -p密碼 -e "show slave status\G"|grep Running|awk '{print $2}'|sed 'N;s/\n//g'`
- if [ $yes == "YesYes" ];then
- fetion --mobile=飛信帳號 --pwd=飛信密碼 --to =監控手機號碼 --msg-utf8="$server 同步成功"
- else
- fetion --mobile=飛信帳號 --pwd=飛信密碼 --to=監控手機號碼 --msg-utf8="$server 同步失敗"
- fi
- fi
- done
- done
2, 加入計劃任務
- #! /bin/bash
- for i in `seq 1 2`
- do
- server=`sed -n "$i"p /home/alldbbak/duiyin|awk '{print $2}'` #分別賦值伺服器ip
- socket=`sed -n "$i"p /home/alldbbak/duiyin|awk '{print $1}'` #分別賦值sock文件
- for m in `mysql --socket=$socket -e "show slave status\G"|grep Running|awk '{print $2}'|sed 'N;s/\n//g'`
- #分別判斷兩個庫的Slave_IO_Running:與 Slave_SQL_Running 是否等於YesYes 這裡我把兩個Yes合併在一起了
- do
- if [ $m != "YesYes" ];then
- pos=(`mysql -h$server –p密碼 -e "show master status\G"|sed -n '2,3'p|awk '{print $2}'|sed 'N;s/\n/ /g'`)
- #如果兩個值不等於Yes,就重新獲取主伺服器上的值.賦值給了pos變數,這裡用了一個數組
- mysql --socket=$socket <<EOF
- slave stop;
- reset slave;
- change master to master_host="$server", master_user='slave',master_password='123456',master_log_file="${pos[0]}",master_log_pos=${pos[1]}; #重新同步一下slave庫,並啟動
- slave start;
- EOF
- # 進入mysql 運行命令,重新同步數據.
- sleep 2
- yes=`mysql --socket=$socket -p密碼 -e "show slave status\G"|grep Running|awk '{print $2}'|sed 'N;s/\n//g'`
- #2秒后重新判斷兩個庫的Slave_IO_Running:與 Slave_SQL_Running 是否等於YesYes
- if [ $yes == "YesYes" ];then
- fetion --mobile=飛信帳號 --pwd=飛信密碼 --to=監控手機號碼 --msg-utf8="$server 同步成功"
- else
- fetion --mobile=飛信帳號 --pwd=飛信密碼 --to=監控手機號碼 --msg-utf8="$server 同步失敗"
- fi
- fi
- done
- done
- #
用飛信軟體,發送一下恢復結果給監控手機.飛信安裝可以在網上查一下資料.
這樣的話,就可以添加一個同步監控了,出錯了,他能自動的去修復,如果修復不了只能手動去修復一下了 這樣改變一下備份的策略,非常好的優化了伺服器在備份時的負載,生產伺服器備份時只要增量的傳輸一些新生成的文件即可. 有什麼不明白的,可以加我QQ相互討論:410018348
- */5 * * * * sh /home/alldbbak/autocheck.sh #每5會鍾執行一次
本文出自 「運維你的人生」 博客,請務必保留此出處http://yaozb.blog.51cto.com/2762349/800334
[火星人 ] 優化企業級備份策略,實現無負載資料庫備份及監控已經有1054次圍觀