MySQLDocker 主從複製搭建
MySQLDocker 的搭建
docker search mysql
docker pull mysql/mysql-server:8.0.26
docker images
docker run -p 3307:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26
使用客戶端無法連接的問題:
mysql -uroot -p
use mysql;
select host,user,plugin from user;
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT USAGE ON *.* TO 'root'@'%';
grant all privileges on *.* to 'root'@'%';
UPDATE user SET plugin='mysql_native_password' WHERE User='root' and host='%';
flush privileges;
-
問題1 :Mysql8的授權寫法發生變更
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; -- 語法發生修改如下: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
MySQL 主從同步搭建
- 創建本地掛載的目錄結構
├── master
│ ├── conf
│ ├── data
│ └── logs
└── slaver
├── conf
├── data
└── logs
# master節點
mkdir -p ~/mydata/mysql/master/data
mkdir -p ~/mydata/mysql/master/conf
mkdir -p ~/mydata/mysql/master/logs
# slaver節點
mkdir -p ~/mydata/mysql/master/data
mkdir -p ~/mydata/mysql/master/conf
mkdir -p ~/mydata/mysql/master/logs
-
創建臨時節點,獲取配置文件
docker run --rm --name mysqltemp -it -v ~/mydata/mysql/master/conf/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:8.0.26 docker cp mysqltemp:/etc/my.cnf ~/mydata/
-
配置文件
[mysqld] server-id=47 #開啓binlog log_bin=master-bin log_bin-index=master-bin.index skip-name-resolve # 設置連接端口 port=3306 # 設置mysql的安裝目錄 basedir=/usr/local/mysql # 設置mysql數據庫的數據的存放目錄 datadir=/usr/local/mysql/mysql-files # 允許最大連接數 max_connections=200 # 允許連接失敗的次數。 max_connect_errors=10 # 服務端使用的字符集默認爲UTF8 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB # 默認使用“mysql_native_password”插件認證 #mysql_native_password default_authentication_plugin=mysql_native_password
-
啓動主
docker run --name mysql-m -p 3336:3306 -v ~/mydata/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26
容器內容部執行MySQL命令:
show master status;
mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000003 | 156 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
-
配置從
server-id=48 #打開MySQL中繼日誌 relay-log-index=slave-relay-bin.index relay-log=slave-relay-bin #打開從服務二進制日誌 log-bin=mysql-bin #使得更新的數據寫進二進制日誌中 log-slave-updates=1 #默認使用“mysql_native_password”插件認證 #mysql_native_password default_authentication_plugin=mysql_native_password
-
啓動從
docker run --name mysql-s -p 3337:3306 -v ~/mydata/mysql/slaver/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.26
-
從連接主(容器內容的執行Mysql)
登錄從服務 mysql -u root -p; #設置同步主節點: CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=156, GET_MASTER_PUBLIC_KEY=1; #開啓slave start slave; #查看主從同步狀態 show slave status; 或者用 show slave status \G; 這樣查看比較簡潔
注意
MASTER_HOST
是 mysql-master 在docker的IP地址;使用docker inspect -- format
查看MASTER_PORT
也是容器內部的端口;通常都是3306
如下可以確認成功運行:
-
主從搭建測試