mysql复制: 一个master对应1个slave
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
復(fù)制的步驟:
1.在主庫(kù)上開(kāi)啟二進(jìn)制日志,把數(shù)據(jù)更改記錄到二進(jìn)制日志(binary log)中.
? mysql會(huì)按照事物提交的順序而非每條語(yǔ)句的執(zhí)行順序來(lái)記錄二進(jìn)制日志,在記錄二進(jìn)制日志后,主庫(kù)會(huì)告訴存儲(chǔ)引擎可以提交事物。
2.從庫(kù)將主庫(kù)上的二進(jìn)制日志復(fù)制到自己的中繼日志(relay log)中
? 從庫(kù)會(huì)啟動(dòng)一個(gè)I/O線程,I/O線程跟主庫(kù)建立一個(gè)客戶端連接,然后主庫(kù)上會(huì)啟動(dòng)一個(gè)binary dump線程,用來(lái)讀取主庫(kù)上的二進(jìn)制日志中的事件。不會(huì)對(duì)事件進(jìn)行輪詢,如果該線程同步上主庫(kù),進(jìn)入休眠狀態(tài),直到主庫(kù)發(fā)送信號(hào)量通知其有新的事件產(chǎn)生才會(huì)被喚醒。
3.從庫(kù)讀取中繼日志的事件,將其重放到從庫(kù)上執(zhí)行,從而時(shí)間從庫(kù)數(shù)據(jù)的更新。
復(fù)制解決的問(wèn)題:
1.數(shù)據(jù)庫(kù)分布:可以隨意停止或開(kāi)始復(fù)制,并在不同的地理位置來(lái)分布數(shù)據(jù)備份,盡量保持網(wǎng)絡(luò)環(huán)境的穩(wěn)定,低延遲連接。
負(fù)載均衡:在讀取操作分布到多臺(tái)從服務(wù)器上,實(shí)現(xiàn)對(duì)密集型應(yīng)用的優(yōu)化。
備份:對(duì)備份來(lái)說(shuō)是技術(shù)上的補(bǔ)充。
高可用和故障切換:避免MYSQL單點(diǎn)故障,設(shè)計(jì)良好的故障切換能夠縮短宕機(jī)時(shí)間。
復(fù)制的方式:
statement/row/mixed
基于row復(fù)制是從mysql5.1版本加入。兩種方式都是通過(guò)在主庫(kù)上記錄二進(jìn)制日志,在從庫(kù)重放日志的方式來(lái)實(shí)現(xiàn)異步的數(shù)據(jù)復(fù)制。大的語(yǔ)句可能導(dǎo)致從庫(kù)產(chǎn)生幾秒,甚至幾分鐘的延遲。
####mysql復(fù)制
(1)dump thread:當(dāng)從服務(wù)器來(lái)復(fù)制時(shí),dump會(huì)去讀取二進(jìn)制日志的語(yǔ)句并發(fā)送給從服務(wù)器?? ?
(2)io thread:在從服務(wù)器由io thread到主服務(wù)上去請(qǐng)求二進(jìn)制日志中語(yǔ)句的內(nèi)容。每隔一段時(shí)間就會(huì)啟動(dòng),io thread到主服務(wù)器上查看二進(jìn)制日志是否有變化。如果有變化則就請(qǐng)求傳輸,一條語(yǔ)句復(fù)制過(guò)來(lái)。?? ?
(3)SQL thread(單線程):io thread獲取到之后將其存儲(chǔ)到relay log中。一條語(yǔ)句一條語(yǔ)句執(zhí)行。
Mysql復(fù)制有三個(gè)種方式:異步,同步,半同步
1)異步:主服務(wù)器的修改操作本地完成就認(rèn)為完成。至于后面的事,并不理會(huì)
2)同步指定是:主服務(wù)器涉及的修改操作,要等待從服務(wù)器也完成
3)半同步:在一主多從的環(huán)境中,只等待一臺(tái)從服務(wù)器同步完成操作。設(shè)置一個(gè)等待超時(shí)時(shí)間,如果超過(guò)這個(gè)時(shí)間,則降級(jí)為異步。在5.5可以使用半同步,google公司提供一個(gè)補(bǔ)丁。半同步如果無(wú)法在指定時(shí)間完成-->自動(dòng) 降到異步模式。
####mysql復(fù)制
一.搭建一個(gè)master對(duì)應(yīng)1個(gè)slave
mysql5.5復(fù)制配置
1.規(guī)劃網(wǎng)絡(luò)和主從機(jī)器
master:10.10.54.64
slave:10.10.54.67
2.master config
log-bin=master-bin
server-id=1
binlog_formate=mixed
3.slave config
log-bin=slave-bin
binlog_formate=mixed
server-id=10
必須大于主
4.在master上面創(chuàng)建一個(gè)復(fù)制用戶并授予權(quán)限
mysql> grant replication slave on *.* to 'gyf'@'10.10.54.67' identified by 'aaa12345';
mysql> flush privileges;
//在從上測(cè)試是否能用復(fù)制用戶登錄
[root@gyf ?~]# mysql -ugyf -paaa12345 -h10.10.54.64
5.查看master上二進(jìn)制日志和position位置
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File????????????? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |????? 107 |????????????? |????????????????? |
+-------------------+----------+--------------+------------------+
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
拓展:重置master? reset master
6.備份master上的數(shù)據(jù),把備份maste數(shù)據(jù)庫(kù)還原到從庫(kù)上
[root@gyf ?~]# mysqldump -uroot -paaa12345 --databases employees |mysql -uroot -paaa12345 -h10.10.54.67
[root@nan86 tmp]# mysqldump -uroot -paaa12345 --master-data=2 --single-transaction --flush-logs --database employees >employees.sql
[root@gyf ?~]# mysqldump -uroot -paaa12345 --databases employees |mysql -uroot -paaa12345 -h10.10.54.67
[root@gyf ?tmp]# mysql -uroot -paaa12345 -h10.10.54.67<employees.sql
ERROR 1130 (HY000): Host '10.10.54.64' is not allowed to connect to this MySQL server
mysql> grant all privileges on *.*? to root@10.10.54.64 identified by 'aaa12345';
mysql> flush privileges;
[root@nan86 tmp]# mysql -uroot -paaa12345 -h10.10.54.67<employees.sql
7.在slave上面change master操作
mysql> change master to master_host='10.10.54.64',master_user='gyf',
??? master_password='aaa12345',
?? master_log_file='master-bin.000001',master_log_pos=107;
8.查看slave狀態(tài)
確定slave上的I/O線程和SQL線程狀態(tài)為YES
mysql> show slave status\G;
*************************** 1. row ***************************
?????????????? Slave_IO_State: Waiting for master to send event
????????????????? Master_Host: 10.10.54.64
????????????????? Master_User: gyf
????????????????? Master_Port: 3306
??????????????? Connect_Retry: 60
????????????? Master_Log_File: master-bin.000001
????????? Read_Master_Log_Pos: 107
?????????????? Relay_Log_File: nan85-relay-bin.000004
??????????????? Relay_Log_Pos: 254
??????? Relay_Master_Log_File: master-bin.000003
???????????? Slave_IO_Running: Yes
??????????? Slave_SQL_Running: Yes
//可以單獨(dú)停掉某一個(gè)線程
mysql> STOP SLAVE IO_THREAD;
mysql> STOP SLAVE SQL_THREAD;
9.在slave上啟動(dòng)slave
mysql> start slave;
###測(cè)試
在master上
mysql> create database a ;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| a????????????????? |
| employees????????? |
| master???????????? |
| mysql????????????? |
| performance_schema |
| test?????????????? |
| tt???????????????? |
+--------------------+
在slave上顯示
mysql> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| a????????????????? |
| employees????????? |
| master???????????? |
| mysql????????????? |
| performance_schema |
| test?????????????? |
| tt???????????????? |
+--------------------+
6 rows in set (0.00 sec)
在master上創(chuàng)建刪除添加數(shù)據(jù),在slave上都能同步。
轉(zhuǎn)載于:https://my.oschina.net/u/1458120/blog/203975
總結(jié)
以上是生活随笔為你收集整理的mysql复制: 一个master对应1个slave的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Xml中SelectSingleNode
- 下一篇: centos更改MySQL数据库目录位置