linux mysql 主从数据库_linux mysql数据库的主从配置
一、原理
mysql主從配置的流程大體如圖:
1)master會(huì)將變動(dòng)記錄到二進(jìn)制日志里面;
2)master有一個(gè)I/O線程將二進(jìn)制日志發(fā)送到slave;
3) slave有一個(gè)I/O線程把master發(fā)送的二進(jìn)制寫入到relay日志里面;
4)slave有一個(gè)SQL線程,按照relay日志處理slave的數(shù)據(jù);
二、操作步驟
按照原理,我們開啟mysql主從復(fù)制,我們大體需要做以下操作:
1)開啟master的二進(jìn)制日志
2)開啟slave的二進(jìn)制日志
3)將slave指向master
4)開始復(fù)制
三、開啟master二進(jìn)制日志
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進(jìn)制日志配置,開啟二進(jìn)制(master-bin只是日志文件名稱,可以自己指定)
log-bin=master-bin
server-id=1
注意:server-id是要指定的,不然會(huì)報(bào)錯(cuò),每一臺指定一個(gè)唯一標(biāo)識符
四、授權(quán)
我們需要給slave配置一個(gè)用戶/密碼的權(quán)限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'slave數(shù)據(jù)庫的IP地址' IDENTIFIED BY '密碼';
這行命令的意思是:允許在某個(gè)IP地址的某個(gè)用戶以某個(gè)密碼對當(dāng)前數(shù)據(jù)庫的所有庫和所有表進(jìn)行復(fù)制操作
注意:以上配置了權(quán)限,我們需要刷新以下權(quán)限使用命令:
mysql>flush privileges;
或者直接重啟mysql服務(wù):
service mysql restart;
五、查看以下master的狀態(tài)
其實(shí)主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:
show master status;
可以看到類似如下信息:
+-------------------+----------+--------------+------------------+-------------------+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |?1516 |||?|
+-------------------+----------+--------------+------------------+-------------------+
File: 日志文件名稱
Position: 日志所在位置
六、開啟slave的二進(jìn)制日志
進(jìn)入slave的服務(wù)器
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進(jìn)制日志配置,開啟二進(jìn)制(relay-bin只是日志文件名稱,可以自己指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,不然會(huì)報(bào)錯(cuò),每一臺指定一個(gè)唯一標(biāo)識符
七、將slave指向master
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服務(wù)器的IP',
>MASTER_USER='master授權(quán)的賬號',
>MASTER_PASSWORD='master授權(quán)的密碼',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
八、開始主從復(fù)制
在slave上執(zhí)行
mysql>start slave;
我們可以查看slave的運(yùn)行狀態(tài):
show slave status\G;
可以看到類似如下內(nèi)容:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
注意:
Slave_IO_Running: YES 表示slave的日志讀取線程開啟
Slave_SQL_Running: YES 表示SQL執(zhí)行線程開啟
如果有主從復(fù)制有錯(cuò)誤信息其實(shí)也可以看到
九、測試
以上我們就將主從復(fù)制功能設(shè)置完畢了,我們可以通過在master里面創(chuàng)建數(shù)據(jù)庫,或者表,插入數(shù)據(jù)等來測試一下
十、注意點(diǎn)
1)開啟了主從復(fù)制,slave庫如果寫入數(shù)據(jù)的話,可能導(dǎo)致數(shù)據(jù)回滾從而主從復(fù)制線程中斷,可以通過以下方式解決:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)如果要停止slave的復(fù)制可以使用命令:
mysql>stop slave;
3)由于主從復(fù)制是基于I/O的日志,所以會(huì)存在一定延時(shí),如果對數(shù)據(jù)一致性要求非常高的話,簡單的主從復(fù)制在實(shí)際環(huán)境中會(huì)存在問題
參考文章:
總結(jié)
以上是生活随笔為你收集整理的linux mysql 主从数据库_linux mysql数据库的主从配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git如何合并指定文件内容_git小技巧
- 下一篇: compat mysql51 5.1_M