文章目錄
- 一.MySQL5.7的安裝及運作
-
- 1.1下載下傳MySQL5.7的Docker鏡像
- 1.2檢視下載下傳的鏡像檔案
- 1.3啟動伺服器上的主MySQL
-
- 1.3.1使用自定義MySQL配置檔案啟動MySQL
- 1.3.2無需自定義配置檔案啟動MySQL
- 1.3.3配置參數檢視
- 1.4啟動伺服器上的從MySQL
- 二.MySQL主從賬号配置及測試
- 三.測試同步
一.MySQL5.7的安裝及運作
1.1下載下傳MySQL5.7的Docker鏡像
docker pull mysql:5.7
1.2檢視下載下傳的鏡像檔案
docker images -a
1.3啟動伺服器上的主MySQL
- 兩台伺服器,一台做主,一台做從
-
MySQL 主資訊:
IP:192.168.137.128
端口:3306
-
MySQL 從資訊:
IP:192.168.137.129
端口:3306
-
-
注意點
主 DB server 和從 DB server 資料庫的版本一緻(或從庫版本略高)
主 DB server 和從 DB server 資料庫資料一緻
主 DB server 開啟二進制日志,主 DB server 和從 DB server 的 server-id 都必須唯一
-
優先操作:
把主庫的資料庫複制到從庫并導入
1.3.1使用自定義MySQL配置檔案啟動MySQL
MySQL5.7預設沒有開啟binlog日志功能,我們增加并加載自定義配置檔案(正常安裝的MySQL的預設配置可以在/etc/mysql/my.cnf或者/etc/my.cnf中找到修改,其中可以包含!includedir其他目錄,例如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d)
-
主MySQL配置檔案設定
建立自定義檔案夾
mkdir -p /my/custom/mysql5.7
進入檔案夾建立自定義配置檔案cd /my/custom/mysql5.7
vi config-mysql.cnf
[mysqld]
server-id = 1 //唯一id
log-bin=mysql-bin //開啟二進制日志
binlog-do-db = test //記錄日志的資料庫即需要同步的資料庫
可選參數還包括:
expire_logs_days=7 #自動清理 7 天前的log檔案,可根據需要修改
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed # binlog日志格式,mysql預設采用statement,建議使用mixed
#在主主同步配置時,需要将兩台伺服器的auto_increment_increment增長量都配置為2,而要把auto_increment_offset分别配置為1和2.這樣才可以避免兩台伺服器同時做更新時自增長字段的值之間發生沖突。
auto-increment-increment = 2
auto-increment-offset = 1 #從機改為2
slave-skip-errors = all
binlog-ignore-db=mysql #不給從機同步的庫(多個寫多行)
binlog-ignore-db=information_schema
log-slave-updates=true
replicate-ignore-db = information_schema #忽略不同步主從的資料庫
relay-log=relay-log-bin #開啟中繼日志
relay-log-index=slave-relay-bin.index #定義relay_log的位置和名稱
使用自定義目錄路徑的配置檔案啟動mysql
docker run --name mysql5.7 -p 3306:3306 -v /my/custom/mysql5.7:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
參數說明:
-v, 給容器挂載存儲卷,挂載到容器的某個目錄
–name, 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字
-e, 指定環境變量,容器中可以使用該環境變量
-d, 指定容器運作于前台還是背景,預設為false
-p, 将容器的端口釋出到宿主主機
具體詳見Docker Run參數說明
1.3.2無需自定義配置檔案啟動MySQL
可以将許多配置選項作為标志傳遞給mysqld。這将使您可以靈活地自定義容器,而無需cnf檔案。
docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --server-id=1 --log-bin=mysql-bin --binlog-do-db=test
注意: 後邊–參數=XXX,=号兩邊不能有空格,-p 3306:3306 這一步很重要,将容器端口映射到linux主機,就可以通過外網或者工具進行資料庫連接配接
啟動後檢視所有正在運作/未運作的容器
docker ps -a
1.3.3配置參數檢視
進入指令行模式,mysql5.7(定義的name)也可以088aa7f32bbb(換成容器id)
docker exec -it mysql5.7 bash
參數說明:
-d :分離模式: 在背景運作
-i :即使沒有附加也保持STDIN 打開
-t :配置設定一個僞終端
具體詳見Docker exec參數說明
連接配接MySQL資料庫,輸入密碼:123456
mysql -uroot -p
檢視資料庫相關配置資訊
檢視log日志是否打開
SHOW VARIABLES like ‘%bin%’;
建立一個用于同步的test資料庫
create database test;
1.4啟動伺服器上的從MySQL
配置啟動方式如上,不同點在于配置檔案不同,如下:
[mysqld]
server-id = 2 //唯一id
挂載方式啟動的話指令不變.
無需配置檔案的啟動方式指令變為:
docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --server-id=2
如上,需要建立同步資料庫test.
二.MySQL主從賬号配置及測試
在主MySQL建立使用者并授權:使用者:slave 密碼:123456
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘192.168.137.129’ IDENTIFIED BY ‘123456’;
flush privileges; #重新整理權限
檢視使用者是否已經建立
select user,host from mysql.user;
檢視使用者權限
show grants for ‘slave’@‘192.168.137.129’;
最後檢視master狀态,記錄二進制檔案名(mysql-bin.000003)和位置(763):
show master status;
用從庫登陸主庫mysql(記得進入容器然後指令登陸),看是否可以正常登陸,如果不能登陸考慮端口及防火牆等因素
登陸從庫資料庫,指定主庫及log資訊(mysql-bin.000003及763由主庫master而來)
CHANGE MASTER TO
MASTER_HOST=‘192.168.137.128’,
MASTER_USER=‘slave’,
MASTER_PASSWORD=‘123456’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mysql-bin.000003’,
MASTER_LOG_POS=763;
參數可選說明:
option:
MASTER_BIND = ‘interface_name’
| MASTER_HOST = ‘host_name’
| MASTER_USER = ‘user_name’
| MASTER_PASSWORD = ‘password’
| MASTER_PORT = port_num
| MASTER_CONNECT_RETRY = interval
| MASTER_RETRY_COUNT = count
| MASTER_DELAY = interval
| MASTER_HEARTBEAT_PERIOD = interval
| MASTER_LOG_FILE = ‘master_log_name’
| MASTER_LOG_POS = master_log_pos
| MASTER_AUTO_POSITION = {0|1}
| RELAY_LOG_FILE = ‘relay_log_name’
| RELAY_LOG_POS = relay_log_pos
| MASTER_SSL = {0|1}
| MASTER_SSL_CA = ‘ca_file_name’
| MASTER_SSL_CAPATH = ‘ca_directory_name’
| MASTER_SSL_CERT = ‘cert_file_name’
| MASTER_SSL_CRL = ‘crl_file_name’
| MASTER_SSL_CRLPATH = ‘crl_directory_name’
| MASTER_SSL_KEY = ‘key_file_name’
| MASTER_SSL_CIPHER = ‘cipher_list’
| MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
| IGNORE_SERVER_IDS = (server_id_list)
參考連結
停止并重新開機slave,檢視slave狀态,兩個部分都啟動表示同步正常
stop slave;
start slave;
show slave status \G;
三.測試同步
主庫test下建表
從庫檢視同步資料,資料同步成功!
主庫增加一條資料
查詢從庫,資料同步成功!