日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql复制: 一个master对应1个slave

發布時間:2025/3/8 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql复制: 一个master对应1个slave 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

復制的步驟:
1.在主庫上開啟二進制日志,把數據更改記錄到二進制日志(binary log)中.
? mysql會按照事物提交的順序而非每條語句的執行順序來記錄二進制日志,在記錄二進制日志后,主庫會告訴存儲引擎可以提交事物。
2.從庫將主庫上的二進制日志復制到自己的中繼日志(relay log)中
? 從庫會啟動一個I/O線程,I/O線程跟主庫建立一個客戶端連接,然后主庫上會啟動一個binary dump線程,用來讀取主庫上的二進制日志中的事件。不會對事件進行輪詢,如果該線程同步上主庫,進入休眠狀態,直到主庫發送信號量通知其有新的事件產生才會被喚醒。
3.從庫讀取中繼日志的事件,將其重放到從庫上執行,從而時間從庫數據的更新。

復制解決的問題:
1.數據庫分布:可以隨意停止或開始復制,并在不同的地理位置來分布數據備份,盡量保持網絡環境的穩定,低延遲連接。
負載均衡:在讀取操作分布到多臺從服務器上,實現對密集型應用的優化。
備份:對備份來說是技術上的補充。
高可用和故障切換:避免MYSQL單點故障,設計良好的故障切換能夠縮短宕機時間。


復制的方式:
statement/row/mixed
基于row復制是從mysql5.1版本加入。兩種方式都是通過在主庫上記錄二進制日志,在從庫重放日志的方式來實現異步的數據復制。大的語句可能導致從庫產生幾秒,甚至幾分鐘的延遲。


####mysql復制
(1)dump thread:當從服務器來復制時,dump會去讀取二進制日志的語句并發送給從服務器?? ?
(2)io thread:在從服務器由io thread到主服務上去請求二進制日志中語句的內容。每隔一段時間就會啟動,io thread到主服務器上查看二進制日志是否有變化。如果有變化則就請求傳輸,一條語句復制過來。?? ?
(3)SQL thread(單線程):io thread獲取到之后將其存儲到relay log中。一條語句一條語句執行。

Mysql復制有三個種方式:異步,同步,半同步

1)異步:主服務器的修改操作本地完成就認為完成。至于后面的事,并不理會

2)同步指定是:主服務器涉及的修改操作,要等待從服務器也完成

3)半同步:在一主多從的環境中,只等待一臺從服務器同步完成操作。設置一個等待超時時間,如果超過這個時間,則降級為異步。在5.5可以使用半同步,google公司提供一個補丁。半同步如果無法在指定時間完成-->自動 降到異步模式。


####mysql復制
一.搭建一個master對應1個slave
mysql5.5復制配置

1.規劃網絡和主從機器
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上面創建一個復制用戶并授予權限
mysql> grant replication slave on *.* to 'gyf'@'10.10.54.67' identified by 'aaa12345';
mysql> flush privileges;
//在從上測試是否能用復制用戶登錄
[root@gyf ?~]# mysql -ugyf -paaa12345 -h10.10.54.64

5.查看master上二進制日志和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上的數據,把備份maste數據庫還原到從庫上
[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狀態
確定slave上的I/O線程和SQL線程狀態為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

//可以單獨停掉某一個線程
mysql> STOP SLAVE IO_THREAD;
mysql> STOP SLAVE SQL_THREAD;

9.在slave上啟動slave


mysql> start slave;



###測試
在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上創建刪除添加數據,在slave上都能同步。

轉載于:https://my.oschina.net/u/1458120/blog/203975

總結

以上是生活随笔為你收集整理的mysql复制: 一个master对应1个slave的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。