溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么樣配置mysql主從復(fù)制、mysql-5.5異步及半同步

發(fā)布時間:2020-05-18 15:07:49 來源:網(wǎng)絡(luò) 閱讀:252 作者:三月 欄目:數(shù)據(jù)庫

下文主要給大家?guī)碓趺礃优渲?a title="mysql" target="_blank" href="http://kemok4.com/mysql/">mysql主從復(fù)制、mysql-5.5異步及半同步,希望這些內(nèi)容能夠帶給大家實際用處,這也是我編輯怎么樣配置mysql主從復(fù)制、mysql-5.5異步及半同步這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

master
1 啟用二進制日志
log-bin = master-bin
log-bin-index = master-bin.index
2 選擇一個唯一的server id
server-id = [0~2^32]
3 創(chuàng)建具有復(fù)制權(quán)限的用戶
replication slave,復(fù)制的從節(jié)點
replication client,聯(lián)系master,獲取信息的權(quán)限
slave
1 啟用二進制日志
relay-log = relay-log
relay-log-index = relay-log.index
2 選擇一個唯一的server id,和主不同
server-id = [0~2^32]
3 連接至主云服務(wù)器復(fù)制文件
從哪里開始復(fù)制?
1)master是新的,slave從頭開始復(fù)制
2)master已經(jīng)運行一段時間,在master執(zhí)行一次備份,記錄二進制日志文件名和事件位置,在slave還原數(shù)據(jù),連接至哪一個二進制文件的哪一個位置?
mysql> change master to master_host= ,master_port= ,master_log_file= ,master_log_pos= ,master_user= ,master_password= ;
mysql> start slave;
4 mysql復(fù)制線程
master會為每一個slave啟動1個dump線程
master:dump
slave:IO_thread,SQL_thread
可單獨啟動
mysql> start slave IO_thread
mysql> start slave SQL_thread
怎么樣配置mysql主從復(fù)制、mysql-5.5異步及半同步
5 半同步復(fù)制時應(yīng)指定同步超時時間,一旦超時,降級為異步復(fù)制


mysql主從異步復(fù)制
    使用二進制格式安裝mysql,并初始化、mtsql服務(wù)腳本復(fù)制、my.cnf配置文件復(fù)制。
導(dǎo)出PATH,方便使用mysql命令
# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin

master
1 修改配置文件
# vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
innodb_file_per_table = 1
log-bin=master-bin
log-bin-index=master-bin.index
server-id   = 1
啟動mysql
# service mysqld start
2 授權(quán)slave復(fù)制
mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser';
mysql> flush privileges;
mysql> flush tables with read lock; # 鎖住table為只讀
3 查看master二進制日志文件狀態(tài),在slave上需要使用
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      355 |              |                  |
+-------------------+----------+--------------+------------------+
mysql> show binlog events in "master-bin.000001";
怎么樣配置mysql主從復(fù)制、mysql-5.5異步及半同步

slave
1 修改配置文件
# vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
innodb_file_per_table = 1
relay-log = relay-log
relay-log-index = relay-log.index
server-id   = 10
啟動mysql
# service mysqld start
2 配置slave同步設(shè)置,并啟動slave復(fù)制
mysql> change master to master_host='192.168.8.30',master_user='replicationuser',master_password='replicationuser',master_log_file='master-bin.000001',master_log_pos=355;
mysql> start salve;
3 查看slave的狀態(tài)
mysql> show slave status\G
Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.8.30
                  Master_User: replicationuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 438
               Relay_Log_File: relay-log.000004
                Relay_Log_Pos: 254
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 438
4 在master查看slave
mysql> show slave hosts;
其他設(shè)置和說明
1 slave上不允許數(shù)據(jù)庫的寫操作,因此在slave上設(shè)置為用戶只讀模式,但此設(shè)置對具有super權(quán)限的用戶無效
# vim /etc/my.cnf
[mysqld]
read-only = on
重啟mysql,即生效
# service mysqld restart
重啟mysqld,復(fù)制線程會自動重啟
修改配置后,或者不重啟,在數(shù)據(jù)庫中直接修改參數(shù)也可以
查看只讀模式是否生效
mysql> show global variables like 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON    |
+---------------+-------+
2 為了保證master bin-log不在緩沖區(qū)緩存,立即同步到磁盤上,減少主從復(fù)制的延遲時間,在master設(shè)定
[mysqld] 
sync-binlog = on
重啟mysql,即生效
# service mysqld restart
重啟mysqld,復(fù)制線程會自動重啟
修改配置后,或者不重啟,在數(shù)據(jù)庫中直接修改參數(shù)也可以
查看立即同步模式是否生效
mysql> show global variables like 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 0     |
+---------------+-------+
3 重啟mysqld,復(fù)制線程會自動重啟,存在哪些問題,如何禁止?
    當(dāng)master執(zhí)行了一些誤操作,由于延遲原因,誤操作還未同步slave;此時在slave關(guān)閉mysql,備份數(shù)據(jù)恢復(fù)到master上,啟動slave的mysql,讓IO_thread跳過剛才的誤操作,再啟動復(fù)制功能。若slave啟動后,主從復(fù)制立即開始,還會同步剛才的誤操作。
    不讓其隨mysql自動啟動,防止同步誤操作。
連接master 需要這兩個文件master.info,relay-log.info,臨時移除。slave無法連接master
在數(shù)據(jù)文件下
master.info 記錄了登陸master和相關(guān)信息
relay-log.info 記錄了relay-log和master-bin的相關(guān)信息 
4 從云服務(wù)器的相關(guān)日志會記錄在slave的錯誤日志中。
5 若master工作了一定時間,此時做主從的注意事項
5.1 master鎖表
mysql> flush tables with read lock;
5.2 master mysql的數(shù)據(jù)庫導(dǎo)出
# mysqldump mydb > mydb.sql
5.3 slave 創(chuàng)建同名數(shù)據(jù)庫,并導(dǎo)入數(shù)據(jù)庫
# mysqldump mydb < mydb.sql
5.4 此時操作和全新的數(shù)據(jù)庫是相同的,注意master_log_file,master_log_pos即可
6 mysql復(fù)制過濾
在master上
# vim /etc/my.cnf
[mysqld]
binlog-do-db=db1,db2
binlog-ignore-db=db1,db2
master binlog-ignore-db帶來的問題
    不記錄部分數(shù)據(jù)庫的二進制日志,二進制日志不完整。當(dāng)云服務(wù)器崩潰時,只能恢復(fù)記錄了二進制日志的數(shù)據(jù),未記錄的將不能恢復(fù),因此不建議使用此選項。
在slave上
可以進行數(shù)據(jù)庫級別的過濾,也可以進行表級別的過濾
# vim /etc/my.cnf
[mysqld]
數(shù)據(jù)庫級別
replicate-do-db=
replicate-ignore-db=
表級別
replicate-do-table=
replicate-ignore-table=
在表級別使用通配
replicate-wild-do-table=mydb.tb% # 僅復(fù)制mydb中以tb開頭的所有表
replicate-wild-ignore-table=mydb.tb_ # 僅復(fù)制mydb中以tb開頭的、后面跟上一個字符的表
slave replicate-ignore-db帶來的問題
    使用此選項,雖不記錄指定slave數(shù)據(jù)庫的二進制日志,但是中繼日志是完整的,因此會占有slave的帶寬資源。
    綜上,如果必須對表進行過濾,建議在slave上進行。
半同步主從復(fù)制
1 master 添加模塊
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> show variables like 'rpl%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_recovery_rank                  | 0     |
| rpl_semi_sync_master_enabled       | ON   |
| rpl_semi_sync_master_timeout       | 10000 | # 異步復(fù)制超時時間,單位ms
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    | # 是否必須等待slave上線
+------------------------------------+-------+
2 slave 添加模塊
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> show variables like 'rpl%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_recovery_rank               | 0     |
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
3 若此時主從同步是開啟的,設(shè)置不會立即生效,需重啟slave io_thread
3.1 master狀態(tài)查看
mysql> show global status like 'rpl%';
+--------------------------------------------+-------------+
| Variable_name                              | Value       |
+--------------------------------------------+-------------+
| Rpl_semi_sync_master_clients               | 0           |
| Rpl_semi_sync_master_net_avg_wait_time     | 0           |
| Rpl_semi_sync_master_net_wait_time         | 0           |
| Rpl_semi_sync_master_net_waits             | 0           |
| Rpl_semi_sync_master_no_times              | 0           |
| Rpl_semi_sync_master_no_tx                 | 0           |
| Rpl_semi_sync_master_status                | ON          |
| Rpl_semi_sync_master_timefunc_failures     | 0           |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0           |
| Rpl_semi_sync_master_tx_wait_time          | 0           |
| Rpl_semi_sync_master_tx_waits              | 0           |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0           |
| Rpl_semi_sync_master_wait_sessions         | 0           |
| Rpl_semi_sync_master_yes_tx                | 0           |
| Rpl_status                                 | AUTH_MASTER |
+--------------------------------------------+-------------+
3.2 slave狀態(tài)查看
mysql> show global status like 'rpl%';
+----------------------------+-------------+
| Variable_name              | Value       |
+----------------------------+-------------+
| Rpl_semi_sync_slave_status | OFF         |
| Rpl_status                 | AUTH_MASTER |
+----------------------------+-------------+
4 只重啟io_thread即可
mysql> stop slave io_thread;
mysql> start slave io_thread;
4.1 master狀態(tài)查看
mysql> show global status like 'rpl%';
+--------------------------------------------+-------------+
| Variable_name                              | Value       |
+--------------------------------------------+-------------+
| Rpl_semi_sync_master_clients               | 1           |
+--------------------------------------------+-------------+
4.2 slave狀態(tài)查看
mysql> show global status like 'rpl%';
+----------------------------+-------------+
| Variable_name              | Value       |
+----------------------------+-------------+
| Rpl_semi_sync_slave_status | ON          |
| Rpl_status                 | AUTH_MASTER |
+----------------------------+-------------+
5 測試
    當(dāng)半同步超時后(10000ms)一次后,會降級為異步復(fù)制。
在slave停止io_thread
mysql> stop slave io_thread;
    在master進行寫操作時,會卡住100000ms,之后降級為異步復(fù)制,恢復(fù)速度;
6 為了使參數(shù)永久生效,在Master和Slave的my.cnf中編輯: 
# On Master 
[mysqld] 
rpl_semi_sync_master_enabled=1 
rpl_semi_sync_master_timeout=1000 # 1 second 
 
# On Slave 
[mysqld] 
rpl_semi_sync_slave_enabled=1  
7 mysql主從機制比較脆弱,若需重啟master,需先要停止slave復(fù)制,即stop slave。
監(jiān)控和監(jiān)控主從復(fù)制工具
percona-toolkit(mattkit-tools)
https://www.percona.com/downloads/percona-toolkit/
# yum localinstall -y percona-toolkit-2.2.18-1.noarch.rpm --nogpgcheck
安裝之后會出現(xiàn)一大堆pt命令
pt-slave-delay:使slave比master慢一些時間
pt-table-checksum:通過單向加密比較主從的數(shù)據(jù)是否一致
rhel使用的是光盤中的rpm庫,無法解決percona的依賴
yum localinstall時出現(xiàn)如下提示
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package
mysql ssl 簡要說明
授權(quán)時,增加ssl選項,強制使用ssl;若無此選項,不受限制,即使啟用了ssl功能,復(fù)制時使用和不使用ssl都可以
mysql> grant replication slave on *.* to 'replicationuser'@'192.168.8.31' identified by 'replicationuser' require ssl;
ssl需要的內(nèi)容
mysql> show global variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+

對于以上關(guān)于怎么樣配置mysql主從復(fù)制、mysql-5.5異步及半同步,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI