MySQL複製配置(多主一從)

複製多主一從mysql

 

replicaionsql

原理緩存

複製有三個步驟:(分爲三個線程 slave:io線程 sql線程 master:io線程)服務器

一、master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events)socket

二、slave將master的binary log events拷貝到它的中繼日誌(relay log)spa

三、slave讀取中繼日誌中的事件,將其重放到slave數據之上線程

日誌解釋日誌

從庫先經過io線程讀取主庫的二進制文件(Master_Log_File)和位置(Read_Master_Log_Pos)而後緩存到本地(從庫服務器)的中繼文件(Relay_Log_File)中並記錄已經讀取到的位置(Relay_Log_Pos),再經過從庫的sql線程去讀取中繼文件(Relay_Log_File),這個sql線程執行會記錄已經執行到了哪一個文件(Relay_Master_Log_File)和哪一個位置(Exec_Master_Log_Pos)。code

配置複製server

一、在master建立複製帳號  

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED BY 'PASSWD';

二、配置master和slave

master
    server-id = 1
    log-bin = mysql-bin
    expire-logs-days = 10  # 設置二進制日誌過時的天數
    max_binlog_size = 512M  # 二進制日誌滾動的閥值

slave
    server-id = 2
    expire-logs-days = 10
    max-relay-log-size = 512M
    relay-log = mysql-relay-bin
    relay_log_recovery = 1  # 修復中繼日誌
    replicate_wild_ignore_table = mysql.%  # 過濾哪些主庫不復制

三、通知slave鏈接到master並從master複製數據

CHANGE MASTER TO MASTER_HOST='master',MASTER_USER='repl',MASTER_PASSWORD='passwd',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0; 

四、啓動複製,查看狀態

slave
  START SLAVE

show slave status\G

在輸出信息中查看I/O線程和SQL線程的狀態值(YES爲正常,NO爲錯誤)

  Slave_IO_Running: Yes

  Slave_SQL_Running: Yes

 

mysqld_multi

與安裝單實例同樣,只是要初始化多個數據目錄對應相應的實例

mkdir -p /storage/data/mysql{1,2,3}
chown -R mysql:mysql /storage/data/mysql{1,2,3}
scripts/mysql_install_db --user=mysql --datadir=/storage/data/mysql1
scripts/mysql_install_db --user=mysql --datadir=/storage/data/mysql2
scripts/mysql_install_db --user=mysql --datadir=/storage/data/mysql3

添加多實例管理用戶

GRANT SHUTDOWN ON *.* TO 'multi'@'localhost' IDENTIFIED BY 'multi'

mysqld_multi

Usage: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]

my.cnf

[mysqld_multi]
mysqld = /storage/server/mysql/bin/mysqld_safe
mysqladmin = /storage/server/mysql/bin/mysqladmin
user = multi
password = multi
log = /storage/data/mysqld_multi.log

[mysqld1]
# 3306 mysql1
port            = 3306
socket          = /tmp/mysql3306.sock
basedir = /storage/server/mysql
datadir = /storage/data/mysql1
character-set-server=utf8
collation-server=utf8_unicode_ci
server-id = 2
expire-logs-days = 10
max-relay-log-size = 512M
relay-log = mysql1-relay-bin
relay_log_recovery = 1
replicate_wild_ignore_table=mysql.%

[mysqld2]
# 3307 mysql2
port            = 3307
socket          = /tmp/mysql3307.sock
basedir = /storage/server/mysql
datadir = /storage/data/mysql2
character-set-server=utf8
collation-server=utf8_unicode_ci
server-id = 2
expire-logs-days = 10
max-relay-log-size = 512M
relay-log = mysql2-relay-bin
relay_log_recovery = 1
replicate_wild_ignore_table=mysql.%

[mysqld3]
# 3308 mysql3
port            = 3308
socket          = /tmp/mysql3308.sock
basedir = /storage/server/mysql
datadir = /storage/data/mysql3
character-set-server=utf8
collation-server=utf8_unicode_ci
server-id = 2
expire-logs-days = 10
max-relay-log-size = 512M
relay-log = mysql3-relay-bin
relay_log_recovery = 1
replicate_wild_ignore_table=mysql.%

mysql主從常見錯誤

error 1062

錯誤緣由:主鍵衝突 出現這種狀況就是從庫出現插入操做 主庫又從新來了一遍 iothread沒問題 sqlthread出錯

解決方案:從庫

mysql> stop slave;
mysql> set global sql_slave_skip_counter=1;
mysql> start slave;
相關文章
相關標籤/搜索