1. 程式人生 > >mysql 主從同步詳細配置教程

mysql 主從同步詳細配置教程

nat 執行c 應用 密碼錯誤 至少 資源 最大的 執行 順序

8.10 Mysql 主從同步

8.10.1 主從原理
mysql主從同步的原理:
1、在master上開啟bin-log日誌,用於記錄master上的更改刪的一些記錄。
2、主從各開啟io線程,從上開啟io線程和sql線程。同時都配置好主從上的serveid唯一性
3、主上配置好授權用戶,從上設置change master授權連接的命令
3、 從上io線程通過授權連接master,master通過io線程檢查到slav的請求的日誌、postsion點位置。
4、master將這些相應的請求內容發送給slave,slave收到後,將內容存放在中繼日誌realy_log裏面,同時生成寫入一個master-info,寫入日誌記錄和pos點。用於下次連接的記錄

日誌記錄同步的點。
5、slave的sql線程檢查到realy-log日誌更新的內容,並將更新的內容解析成sql語句然後在本地去exec執行。同時也將記錄寫入realy-info
6、主從同步是屬於異步方式。

8.10.2 主從同步狀態

mysql> show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 10.204.3.13
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 239948407
Relay_Log_File: mysqld-relay-bin.000006
Relay_Log_Pos: 30462462
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 239948407
Relay_Log_Space: 112003215
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
IO線程和SQL線程都為YES

Master_Log_File: mysql-bin.000004
Relay_Master_Log_File: mysql-bin.000004
主日誌文件和從讀取的文件為同一個

Read_Master_Log_Pos: 239948407
Exec_Master_Log_Pos: 239948407
讀取主日誌的偏移量和執行主日誌的偏移量相等

show processlist;

show slave status;

sending binlog event to slave;
二進制日誌由各種事件組成,一個事件通常為一個新加一些其它信息,線程已經從二進制日誌讀取了一個事件並且正將發送到從服務器

finished reading one binlog;switching to next binlog

線程已經讀完二進制日誌文件並且打開下一個要發送到從服務器的日誌文件

has sent all binlog to slave;waiting for binlog to be updated
線程已經從二進制日誌讀取所有主要的更新並已經發送到了從服務器,線程現在正空閑,等待由主服務器上新的更新導致的出現在二進制日誌中的新事件

waiting to finalize termination
線程停止時發生的一個很簡單的狀態

8.10.3 MySQL主從同步

(mysql中有自增長字段,在做數據庫的主主同步時需要設置自增長的兩個相關配置:
在主主同步配置時,需要將兩臺服務器的auto_increment_increment增長量都配置為2,而要把auto_increment_offset分別配置為1和2,這樣才可以避免兩臺服務器同時做更新時自增長字段的值之間發生沖突。)

? 配置主(master)

  1. vi /etc/my.cnf # 修改添加
    server-id=1
    log-bin=mysql-bin # mysql-bin日誌前綴,可自定義
    binlog-do-db=db1,db2 # 需要同步的庫
    binlog-ignore-db=db1,db2 # 忽略不同步的庫

binlog兩參數2選1 都不寫全部同步
查詢bin-log是否開啟 show variables like ‘%log_bin%‘;

  1. grant replication slave on . to root@‘localhost‘ identified by ‘123456‘; # 創建同步用戶
    Flush privileges;

  2. show master status; # 一定要記住前兩列的內容,
    | File | Position | Binlog_Do_DB |
    mysql-bin.0000007 106

4.同時不退出Mysql,復制窗口,使用mysqldump在邏輯上保證兩臺數據庫的一致性,比如將主庫導出並導入到從上。
mysqldump -uroot -p123456 -A -B --events --master-data=1 -x > /backup/all.mysql

加只讀鎖: flush table with locak;
解鎖: unlocak tables;

? 設置從(slave)

  1. vi /data/mysql/my.cnf

server -id =2 # 這個數據不能和主一樣
以下可選參數:
replicate-do-db=db1,db2
replicate-ignore-db=db1,db2

  1. 進入mysql 執行:slave stop;

CHANGE MASTER TO
MASTER_HOST=‘master2.mycompany.com‘,
MASTER_USER=‘replication‘,
MASTER_PASSWORD=‘bigs3cret‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘master2-bin.001‘,
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;

  1. 執行:slave start;

  2. 從上查看從的狀態: show slave status\G;

8.10.4 MySQL主主同步
雙機熱備的概念簡單說一下,就是要保持兩個數據庫的狀態自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持兩個數據庫數據一致。 這樣做的好處多。 1. 可以做災備,其中一個壞了可以切換到另一個。 2. 可以做負載均衡,可以將請求分攤到其中任何一臺上,提高網站吞吐量。 對於異地熱備,尤其適合災備。
以下架構,可以在雙主上實現負載均衡,也可以利用keeplived實現vip訪問。

解決主鍵自增長變量沖突

master1:

auto_increment_increment =2 # 自增ID的間隔 1 3 5 間隔為2
auto_increment_offset=1 # ID的初始位置
log-bin=mysql-bin
log-slave-updates

master2:
auto_increment_increment =2 # 自增ID的間隔 2 4 6 間隔為2
auto_increment_offset=2 # ID的初始位置
log-bin=mysql-bin
log-slave-updates

存在問題,可能master2在寫入數據的時候,不會從2開始,可能會從6開始,接master1最大的ID後面插入,形成6 8 10

在主從同步已經建好的情況下:

8.10.5 Mysql 主從級聯

從庫開啟binlog的場景

  1. 主從級聯方式 從充當主庫的時候
  2. 做備份服務器的時候

開啟方法

log-bin=mysql-bin
log-slave-updates
expire_logs_days=7 保存天數

8.10.6 MySQL主主同步故障
圖中出現了兩個No。
Slave_IO_Running: No
Slave_SQL_Running: No
說明slave沒有成功, 即,從B到A的同步沒有成功。 我們去查看mysql錯誤日誌,前面說過位置:

找到 機器名.err 文件,打開看看:

看圖中的error信息。 說找不到中繼日誌文件。
這是因為我們在配置A的中繼文件時改了中繼文件名,但是mysql沒有同步。解決辦法很簡單。

先停掉mysql服務。 找到這三個文件,把他們刪掉。 一定要先停掉mysql服務。不然還是不成功。你需要重啟一下機器了。 或者手動kill mysqld。
好了, 啟動mysql之後。 我們在來檢查一下slave狀態:

8.10.7 Mysql 一主多從

8.10.8 Mysql主從同步一鍵腳本實現

MYUSER=mysql
MYPASSWD=123456
MYSOCK=/usr/local/mysql/var/mysql.sock
LOG_FILE=${DATEPATH}/mysqllogsdate +%F.log
DATA_FILE=${DATA_PATH}/mysqlbackupdate +%F.sql.gz
MYSQL_PATH=/usr/local/mysql/bin
MYSQL_CMD="$MYSQL_PATH/mysql -u$MYUSER -p$MYPASSWD -S $MYSOCK"
MYSQL_DUPM="$MYSQL_PATH/dump -u$MYUSER -p$MYPASSWD -A -B --master-data=1 --single-tarnsaction -e"

${MYSQL_DUMP} | gzip > $DATA_FILE

8.10.9 Mysql 主從切換

8.10.9.1 Reset master 和Reset slave

? RESET MASTER
刪除所有index file 中記錄的所有binlog 文件,將日誌索引文件清空,創建一個新的日誌文件,這個命令通常僅僅用於第一次用於搭建主從關系的時的主庫,

註意
reset master 不同於purge binary log(清除二進制日誌)的兩處地方
1 reset master 將刪除日誌索引文件中記錄的所有binlog文件,創建一個新的日誌文件 起始值從000001 開始,然而purge binary log 命令並不會修改記錄binlog的順序的數值
2 reset master 不能用於有任何slave 正在運行的主從關系的主庫。因為在slave 運行時reset master 命令不被支持,reset master 將master 的binlog從000001 開始記錄,slave 記錄的master log 則是reset master 時主庫的最新的binlog,從庫會報錯無法找的指定的binlog文件。

? RESET SLAVE
reset slave 將使slave 忘記主從復制關系的位置信息。該語句將被用於幹凈的啟動, 它刪除master.info文件和relay-log.info 文件以及所有的relay log 文件並重新啟用一個新的relaylog文件。
使用reset slave之前必須使用stop slave 命令將復制進程停止。

8.10.9.2 master突然down機,如何恢復:

  1. 檢查slave服務器
    檢查從庫與主庫的最後狀態
    mysql> show processlist;
    | 46 | tongbu | WEB-1:58181 | NULL | Binlog Dump | 3221 | Has sent all binlog to slave; waiting for binlog to be updated
    如果看到上面一行狀態,說明主從之間同步是正常的

  2. 對比pos點
    在主服務器上查詢show master status;上的pos點與從上的master.info的最新pos點是否一致
    如果是一主多從的情況下,查看從的master.info中的信息最新,pos點大,說明更新最完整,然後將它提升為主庫,。

  3. 停止從庫的io線程
    確保所有relay log全部更新完畢
    在每個從庫上執行stop slave;show processlist;
    直到看到Has read all relay log;表示從庫更新都執行完畢

  4. 提升從庫為主庫

a) 首先配置/etc/my.cnf文件,開啟binlog
註釋掉一些log-slave-updates read-only
b) 在數據庫目錄下清除master info和mysql-bin文件
c) 執行以下命令
reset master;

  1. 在新的主庫上添加grant授權
  2. 在新的主庫上show master status\G; 查看post點和mysqlbin文件
  3. 登入從庫
    stop slave;
    change master to masetr_host 設置主庫
    start slave;

8.10.9.3 有計劃的切換主從

  1. 先鎖表 防止主數據庫有新的數據寫入
  2. 登陸從查看狀態 show processlist; 查看最後的同步是否完成
  3. 在需要提升主庫的從庫上,
    a) 修改配置文件 my.cnf
    添加log-bin=mysql-bin
    b) 刪除本地的master.info
    執行:stop slave; reset master;
    c) 重啟mysql服務
  4. 添加grant授權,show master status狀態
  5. 在所有從庫上執行
    stop slave;
    change master to master_host=’10.204.1.200’;
    start slave;

8.10.9.4 主庫降級為從庫
【註意】將原主庫切換成從,步驟中執行reset slave,意思就是將本地的mysql-bin和mster-info信息清除,清除歷史的主從關系文件

  1. 停止mysqld服務,修改配置文件,刪除log-bin
  2. 刪除mysql目錄下的所有mysqlbin(binlog)文件和master.info信息
  3. 啟動服務進入mysql 執行reset slave;
  4. 將現在的主庫的全備恢復至從庫(重要,數據必須一致)
  5. 在現在的主庫show master status\G; 查看日誌文件和Post點
  6. 在從庫上stop slave;change master; start slave; show slave ststus\G;查看狀態

8.10.1 主從同步廷遲

  1. 誤刪除數據的快速還原 再追加binlog
  2. 廷遲測試
  3. 歷史查詢(很少場景會用)
    stop slave
    change master to master-delay=600; 單位s秒
    start slave;
    取消,=0;

    Show slave status\G;

此版本在5.5以上才可以配置

8.10.2 主從同步故障
mysql> show master status\G;
1. row
File: mysql-binlog.000001
Position: 309
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

ERROR:
No query specified

Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file‘

原因: change master的時候指定的文件錯誤或者格式不對,導致無法讀取文件

解決方法:找出出錯的地方,重新change master

錯誤提示:
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

/etc/init.d/mysql stop

mysql_salfe --user=mysql --skip-grant-tables --skip-networking &

mysql -u root mysql
mysql>update user set password=password(‘newpasswd‘) where user=‘root‘;
mysql>flush privileges;
mysql>quit

mysql>SET PASSWORD = PASSWORD(‘newpasswd‘);

8.10.2.1 根據錯誤代碼跳過指定的錯誤
? 方法1:配置文件方式
在配置文件中,添加以下參數,對一些不重要的錯誤代碼自動跳過
vim /etc/my.cnf
--slave-skip-errors=1032,1062,1007
一般由於入庫重復導致的失敗可以忽略

? 方法2:執麽命令
在master端執行鎖表,防止新的數據寫入
mysql > flush tables with read lock;

在salve端執行下列語句

stop slave;
set global sql_slave_skip_counter=1;s
start slave;

8.10.2.2 主從同步常見錯誤代碼

1005:創建表失敗
1006:創建數據庫失敗
1007:數據庫已存在,創建數據庫失敗<=================可以忽略
1008:數據庫不存在,刪除數據庫失敗<=================可以忽略
1009:不能刪除數據庫文件導致刪除數據庫失敗
1010:不能刪除數據目錄導致刪除數據庫失敗
1011:刪除數據庫文件失敗
1012:不能讀取系統表中的記錄
1020:記錄已被其他用戶修改
1021:硬盤剩余空間不足,請加大硬盤可用空間
1022:關鍵字重復,更改記錄失敗
1023:關閉時發生錯誤
1024:讀文件錯誤
1025:更改名字時發生錯誤
1026:寫文件錯誤
1032:記錄不存在<=============================可以忽略
1036:數據表是只讀的,不能對它進行修改
1037:系統內存不足,請重啟數據庫或重啟服務器
1038:用於排序的內存不足,請增大排序緩沖區
1040:已到達數據庫的最大連接數,請加大數據庫可用連接數
1041:系統內存不足
1042:無效的主機名
1043:無效連接
1044:當前用戶沒有訪問數據庫的權限
1045:不能連接數據庫,用戶名或密碼錯誤
1048:字段不能為空
1049:數據庫不存在
1050:數據表已存在
1051:數據表不存在
1054:字段不存在
1062:字段值重復,入庫失敗<==========================可以忽略
1065:無效的SQL語句,SQL語句為空
1081:不能建立Socket連接
1114:數據表已滿,不能容納任何記錄
1116:打開的數據表太多
1129:數據庫出現異常,請重啟數據庫
1130:連接數據庫失敗,沒有連接數據庫的權限 一般常見的是做授權時授權錯誤
1133:數據庫用戶不存在
1141:當前用戶無權訪問數據庫
1142:當前用戶無權訪問數據表
1143:當前用戶無權訪問數據表中的字段
1146:數據表不存在
1147:未定義用戶對數據表的訪問權限
1149:SQL語句語法錯誤
1158:網絡錯誤,出現讀錯誤,請檢查網絡連接狀況
1159:網絡錯誤,讀超時,請檢查網絡連接狀況
1160:網絡錯誤,出現寫錯誤,請檢查網絡連接狀況
1161:網絡錯誤,寫超時,請檢查網絡連接狀況
1169:字段值重復,更新記錄失敗
1177:打開數據表失敗
1180:提交事務失敗
1181:回滾事務失敗
1203:當前用戶和數據庫建立的連接已到達數據庫的最大連接數,請增大可用的數據庫連接數或重啟數據庫
1205:加鎖超時
1211:當前用戶沒有創建用戶的權限
1216:外鍵約束檢查失敗,更新子表記錄失敗
1217:外鍵約束檢查失敗,刪除或修改主表記錄失敗
1226:當前用戶使用的資源已超過所允許的資源,請重啟數據庫或重啟服務器
1227:權限不足,您無權進行此操作
1235:MySQL版本過低,不具有本功能

8.10.2.3 重新做主從,完全同步
該方法適用於主從庫數據相差較大,或者要求數據完全統一的情況
解決步驟如下:
1) 進入mater,進行鎖表,
mysql> flush tables with read lock;
註意:該處是鎖定為只讀狀態,語句不區分大小寫
2) 進行數據備份
[root@server01 mysql]#mysqldump -uroot -p mysql> mysql.sql
3) 查看master 狀態
mysql> show master status;
+-------------------+----------+--------------+-------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+-------------------------------+
| mysqld-bin.000001 | 272 | |
+-------------------+----------+--------------+-------------------------------+
4) 把mysql備份文件傳到從庫機器,進行數據恢復
[root@server01mysql]# scp mysql.sql [email protected]:/tmp/
5) 停止slave的狀態
mysql> stop slave;
6) 在slave上恢復數據庫
mysql> source /tmp/mysql.sql
7) 設置從庫同步用戶
change master to master_host = ‘192.168.1.12‘, master_user = root,master_password=‘123456‘, master_log_file = ‘mysqld-bin.000001‘, master_log_pos=272;

8)重新開啟從同步
mysql> start slave;
9)查看同步狀態
mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
10)在master上解鎖:mysql>unlock tables;

8.10.2.4 忽略錯誤後,繼續同步
該方法適用於主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況
解決:

  1. stop slave;
  2. set global sql_slave_skip_counter =1; # 1指的是跳一步,可以自定義多少步
  3. start slave;
    之後再用mysql> show slave status\G 查看:

8.10.2.5 數據庫硬盤壞了,如何恢復數據?

  1. 找一臺新設備,先恢復全備數據備份,
  2. 恢復備份之後到當前的binlog日誌,

8.10.2.6 The server is not configured as slave; fix in config file or with CHANGE MASTER TO
解決方法:先stop slave;再change master,再start slave;

8.10.2.7 Waiting to reconnect after a failed master event read
日誌報錯 Access denied; you need the REPLICATION SLAVE privilege for this operation

8.10.2.8 Got fatal error 1236 from master when reading data from binary log

原因:可能是在changemaster的時候,指定的bin_log日誌的名稱書寫格式有誤,比如多了空格,或者寫錯字等,

本人經歷的方法:

  1. 重啟master端的mysqld服務,查看show master status\G; 查看最新post點
  2. 在slave上,執行change master to master_log_file=‘mysql_bin.000005‘,master_log_pos=106;

網上方法2:
在source那邊,執行:
flush logs;
show master status;
記下File, Position。
在target端,執行:
CHANGE MASTER TO MASTER_LOG_FILE=‘testdbbinlog.000008‘,MASTER_LOG_POS=107;
slave start;
show slave status \G
一切正常。

8.10.2.9 mysql出現同步故障如何解決?

8.10.2.10 mysql出現同步廷遲原因是什麽,如何解決

  1. MySQL數據庫主從同步延遲是怎麽產生的。
    當主庫的TPS並發較高時,產生的DDL數量超過slave一個sql線程所能承受的範圍,那麽延時就產生了,當然還有就是可能與slave的大型query語句產生了鎖等待。
  2. 網絡延遲
  3. master負載
  4. slave負載
  5. 硬件性能差

一般的做法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器,只作為備份用,不進行其他任何操作,就能相對最大限度地達到’實時’的要求了

優化
答:最簡單的減少slave同步延時的方案就是在架構上做優化,盡量讓主庫的DDL快速執行。還有就是主庫是寫,對數據安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不需要這麽高的數據安全,完全可以講sync_binlog設置為0或者關閉binlog,innodb_flushlog也可以設置為0來提高sql的執行效率。另外就是使用比主庫更好的硬件設備作為slave。

另外,再介紹2個可以減少延遲的參數
–slave-net-timeout=seconds
參數含義:當slave從主數據庫讀取log數據失敗後,等待多久重新建立連接並獲取數據
slave_net_timeout單位為秒 默認設置為 3600秒
| slave_net_timeout | 3600
–master-connect-retry=seconds
參數含義:當重新建立主從連接時,如果連接建立失敗,間隔多久後重試。
master-connect-retry單位為秒 默認設置為 60秒
通常配置以上2個參數可以減少網絡問題導致的主從數據同步延遲

8.10.2.11 Host ‘mysql-slave‘ is not allowed to connect to this MariaDB server
error connecting to master ‘[email protected]:3306‘ - retry-time: 10 retries: 86400 message: Host ‘mysql-slave‘ is not allowed to connect to this MariaDB server

180408 9:23:13 [ERROR] Slave I/O: error connecting to master ‘[email protected]:3306‘ - retry-time: 10 retries: 86400 message: Host ‘mysql-slave‘ is not allowed to connect to this MariaDB server, Error_code: 1130

故障原因: 報錯誤代碼1130 主從狀態顯示IO一直處理無法連接,根據代碼判斷是授權連接有問題

處理方法:查詢主的用戶信息,看是不是授權時授權的用戶名和IP有錯,重新授權

8.11 Mysql 半同步

1,當Slave主機連接到Master時,能夠查看其是否處於半同步復制的機制。
2,當Master上開啟半同步復制的功能時,至少應該有一個Slave開啟其功能。此時,一個線程在Master上提交事務將受到阻塞,直到得知一個已開啟半同步復制功能的Slave已收到此事務的所有事件,或等待超時。
3,當一個事務的事件都已寫入其relay-log中且已刷新到磁盤上,Slave才會告知已收到。在 Master 實例上,有一個專門的線程(ack_receiver)接收備庫的響應消息,並以通知機制告知主庫備庫已經接收的日誌,可以繼續執行。
4,如果等待超時,也就是Master沒被告知已收到,此時Master會自動轉換為異步復制的機制。當至少一個半同步的Slave趕上了,Master與其Slave自動轉換為半同步復制的機制。
5,半同步復制的功能要在Master,Slave都開啟,半同步復制才會起作用;否則,只開啟一邊,它依然為異步復制。 6,半同步特性的出現,就是為了保證在任何時刻主備數據一致的問題。相對於異步復制,半同步復制要求執行的每一個事務,都要求至少有一個備庫成功接收後,才返回給用戶。

半同步的布署:

實現半同步復制的功能很簡單,只需在mysql的主服務器和從服務器上安裝個google提供的插件即可實現,
主服務上使用semisync_master.,從服務器上使用sosemisync_slave.so插件即可實現,插件在mysql通用二進制的mysql/lib/plugin目錄內。
其配置步驟如下
1、分別在主從節點上安裝相關的插件
master:
安裝插件:mysql> install plugin rpl_semi_sync_master SONAME ‘semisync_master.so‘;
啟動模塊:mysql> set global rpl_semi_sync_master_enabled = 1;
設置超時時間:mysql> set global rpl_semi_sync_master_timeout = 1000;

slave:
安裝插件:msyql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
啟動模塊:mysql> set global rpl_semi_sync_slave_enabled = 1;
重啟進程使其模塊生效:mysql> stop slave io_thread; start slave io_thread;

上面的設置時在mysql進程內動態設定了,會立即生效但是重啟服務以後就會失效,為了保證永久有效,需要把相關配置寫到主、從服務器的配置文件my.cnf內:

在Master和Slave的my.cnf中編輯:
On Master
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #此單位是毫秒

On Slave
[mysqld]
rpl_semi_sync_slave_enabled=1

確認半同步功能已經啟用,通過下面的操作進行查看
master:
mysql> create database asyncdb;
master> show status like ‘rpl_semi_sync_master_yes_tx‘;
slave> show databases;

其測試過程如下

  1. 在主數據庫上創建數據庫,你會發現很快就創建了
  2. 我們測試關閉從數據庫,此時再主數據庫上創建數據庫時,會處理等待狀態
    ,當超時才會被創建,一旦超時,主會從半同步切換為異步同步,
  3. 當從開啟半同步,又會恢復半同步

8.12 Mysql 讀寫分離 amoeba mysql-proxy mycal

mysql讀寫分離的實現:

  1. 通過web代碼
  2. 通過第三方軟件mysql-proxy amoeba

mysql 主從同步詳細配置教程