http://www.toutiao.com/a6348218076932538625/?tt_from=mobile_qq&utm_campaign=client_share&app=explore_article&utm_source=mobile_qq&iid=5840657922&utm_medium=toutiao_ios
Mysql 雙機熱備 設定政策
UI視訊教程 2016-11-02 12:15:08
可以替換的配置變量
Master:219.245.87.10
slave的授權賬号:backup
slave的授權賬号密碼:[email protected]
master的同步資料庫:lian
---------------------------------------------------------------------------------------------------------------
/etc/init.d/iptalbes start 開啟指令
/etc/init.d/iptables restart 重新開機指令
1.修改my.cnf
(1)在[mysqld]後加入:
server-id=1
#同步事件的日志記錄檔案,最好不要寫參數,預設為 log-bin=MySQL-bin.000001
log-bin=
#提供資料同步服務的資料庫,多個用逗号分開。在slave 端配置即可
binlog-do-db=lian
#要忽略的資料庫
binlog-ignore-db=mysql
(2)屏蔽下面的設定,打開遠端連接配接
#bind-address = 127.0.0.1
2.可以導出要同步的資料庫給slave初始化用.
2.1 适用于兩個已存在的資料庫
mysqldump [OPTIONS] database [tables]
mysqldump -u root -p backup_db > backup_db.txt;//導出backup_db庫
恢複時使用:
mysql>create database backup_db;
mysql>use backup_db;
mysql>source /var/www/db.txt //win下可能需要<符号
mysqldump -u root -p --all-database > db.txt //導出全部
mysqldump -u root -p --databases DB1 DB2 DB2_table1 >db.txt
2.2 适用于slave為新的資料庫
适合于建立資料庫的情況,特别适合于 master 與 slave 在 my.cnf 已經設定好 replication 關系 (但未指定 database 同步資料庫 ) 的情況: 這就是使用 mysql 的 sql 語句 load table from master 與 load data from master;
load table from master 可以從 master 資料庫把表結構複制到 slave 資料庫中,這樣可以建立同步的表。
load data from master 是從 master 資料庫把資料導入到 slave 資料表中,條件是 master 從一開始安裝運作就使用了 bin-log 參數而儲存有二進制日志
3.給slave建立的授權登入帳号
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY '[email protected]';
mysql> flush privileges;
mysql> select user,host from user;
+——–+——————+
| user | host |
+——–+——————+
| root | 127.0.0.1 |
| backup | 192.168.254.2 |
| | localhost |
| root | localhost |
| | nod1.test.domain |
| root | nod1.test.domain |
+——–+——————+
6 rows in set (0.01 sec)
(為強安全選項,權限少。mysql>GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY '[email protected]';)
注意:backup,1234為slave的登入帳号
4.重新開機mysql,
mysql>show master status /G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 98
Binlog_Do_DB: lian
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
Slave:10.10.10.22
slave做更新的資料庫:lian
---------------------------------------------------------------------------------------------------------------
1.修改my.cnf
(1)在[mysqld]後加入:
server-id=2 # 如果有多個 slave 就改為不重複的 id 就好,在mysql 4.1 中,這個已經取消了
master-host=10.10.10.22
master-user=backup #同步使用者帳号
[email protected]
master-port=3306
master-connect-retry=60 #預設重試間隔60秒
replicate-do-db=lian # 告訴slave隻做 test 資料庫的更新
bin-log =
(2)可選;雙向備份時必須!屏蔽下面的設定,打開遠端連接配接,
#bind-address = 127.0.0.1
2.導入目标資料庫
2.1 恢複時使用:
mysql>create database backup_db;
mysql>use backup_db;
mysql>source /var/www/db.txt //win下可能需要<符号
2.2 适用于slave為新的資料庫
适合于建立資料庫的情況,特别适合于 master 與 slave 在 my.cnf 已經設定好 replication 關系 (但未指定 database 同步資料庫 ) 的情況: 這就是使用 mysql 的 sql 語句 load table from master 與 load data from master;
load table from master 可以從 master 資料庫把表結構複制到 slave 資料庫中,這樣可以建立同步的表。
load data from master 是從 master 資料庫把資料導入到 slave 資料表中,條件是 master 從一開始安裝運作就使用了 bin-log 參數而儲存有二進制日志
3.重新開機mysql
mysql>slave start;
mysql>show slave status /G
=============確定===============
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
##############################################################################################################
1. master 與 slave 有相同的初始資料記錄,保證同步操作開始後兩者資料一緻
2. master 必須使用 bin-log 二進制日志記錄 ( 推薦 slave 也使用 bin-log )
3.當有錯誤産生時檢查slave的data目錄下*.err日志檔案。此時同步的線程退出
4.如果你用 Linux / unix 作業系統,那一定要注意一下防火牆 firewall
有沒有限制 mysql 遠端通路,如果是,最好是打開遠端通路端口,并作好通路 ip 限制
5. slave 是從 master 的 bin-log 是讀取 sql 記錄來同步,是以,從哪一條 log 開始讀取很重要
這樣即執行了手工同步
6.程式可能在slave上進行了寫操作
7.也可能是slave機器重起後,事務復原造成的.
手工同步方法
----------
1.首先停掉Slave服務:slave stop
2.到主伺服器上檢視主機狀态:
記錄File和Position對應的值。
mysql> show master status /G
File: log-test.000003
Position: 98
3.到slave伺服器上執行手動同步:
mysql>change master to
master_host='202.117.113.138',
master_user='backup',
master_password='1234',
master_port=3306,
master_log_file='log-test.000003',
master_log_pos=98;
4.開啟slave服務并測試:
mysql> slave start;
1 row in set (0.00 sec)
再次檢視slave狀态發現:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0