一、服務(wù)實(shí)例安裝
1.1 查找鏡像
docker search mysql
或者去倉(cāng)庫(kù)找
https://hub.docker.com/_/mysql?tab=tags
1.2 下載鏡像
docker pull mysql:8.0.29
選擇 docker.io/library/mysql:8.0.29
1.3 配置文件my.cnf
單機(jī)的配置文件
[mysql]
default-character-set=?utf8mb4?
[mysqld]
port=3306
authentication_policy=mysql_native_password
主從復(fù)制時(shí)的主配置文件
[mysqld_safe]
[mysqldump]
quick
[mysql]
no-auto-rehash
default-character-set= utf8mb4?
[client]
[mysqld]
default_authentication_plugin=mysql_native_password
port=3306
user=mysql
character_set_server= utf8mb4?
lower_case_table_names = 1
default_storage_engine = InnoDB
wait_timeout=31536000
interactive_timeout=31536000
max_connections=5000
## 設(shè)置server_id,同一局域網(wǎng)中需要唯一
server_id=1
## 指定不需要同步的數(shù)據(jù)庫(kù)名稱(chēng)
binlog-ignore-db=mysql?
## 開(kāi)啟二進(jìn)制日志功能
log-bin=mysql-bin?
## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù))
binlog_cache_size=5M?
## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row)
binlog_format=mixed?
## 二進(jìn)制日志過(guò)期清理時(shí)間。
binlog_expire_logs_seconds=600
## 二進(jìn)制日志最大的大小,默認(rèn)1G,最大1G
max_binlog_size=1G
## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類(lèi)型的錯(cuò)誤,避免slave端復(fù)制中斷。
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062
主從復(fù)制時(shí)的從配置文件
[mysqld_safe]
[mysqldump]
quick
[mysql]
no-auto-rehash
default-character-set= utf8mb4?
[client]
[mysqld]
default_authentication_plugin=mysql_native_password
port=3306
user=mysql
character_set_server= utf8mb4?
lower_case_table_names = 1
default_storage_engine = InnoDB
wait_timeout=31536000
interactive_timeout=31536000
max_connections=5000
## 設(shè)置server_id,同一局域網(wǎng)中需要唯一
server_id=2
## slave設(shè)置為只讀(具有super權(quán)限的用戶除外)
read_only=1
1.4 掛載配置啟動(dòng)
docker run \
????-p 3306:3306 \
????-v 配置文件:/etc/mysql/conf.d/my.cnf \
????-v 數(shù)據(jù)目錄:/var/lib/mysql \
? ? -v 日志目錄:/var/log/mysql \
? ? -e TZ=Asia/Shanghai \
? ? -e MYSQL_ROOT_PASSWORD=密碼
? ??--privileged=true \
? ? -d 鏡像ID
二、主從復(fù)制配置
2.1 主配置
進(jìn)入命令行,創(chuàng)建主從同步的用戶和密碼,并授權(quán)
CREATE USER 'slave'@'%' IDENTIFIED BY '密碼';
GRANT?REPLICATION?SLAVE?ON *.*?TO?'slave'@'%';
flush privileges;
查看數(shù)據(jù)狀態(tài),獲取File和Postion
show master status;
2.2 從配置
進(jìn)入命令行
change master to master_host='主IP',master_user='slave',master_password='同步用戶的密碼',master_port=主端口,master_log_file='主File',master_log_pos=主Postion,master_connect_retry=30;
字段解釋
master_host:主數(shù)據(jù)庫(kù)的IP地址;
master_port:主數(shù)據(jù)庫(kù)的運(yùn)行端口;
master_user:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶賬號(hào);
master_password:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶密碼;
master_log_file:指定從數(shù)據(jù)庫(kù)要復(fù)制數(shù)據(jù)的日志文件,通過(guò)查看主數(shù)據(jù)的狀態(tài),獲取File參數(shù);
master_log_pos:指定從數(shù)據(jù)庫(kù)從哪個(gè)位置開(kāi)始復(fù)制數(shù)據(jù),通過(guò)查看主數(shù)據(jù)的狀態(tài),獲取Position參數(shù);
master_connect_retry:連接失敗重試的時(shí)間間隔,單位為秒。
開(kāi)啟同步
start slave;
查看主從同步狀態(tài)
show slave status \G
Slave_IO_Running和 Slave_SQL_Running都為yes的時(shí)候表示成功。
2.3 主從測(cè)試
進(jìn)入主命令行,創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名稱(chēng);
show databases;
進(jìn)入從命令行,查看數(shù)據(jù)庫(kù)
show databases;
從庫(kù)也有新建的庫(kù),表示主從復(fù)制配置成功