docker 下載mysql鏡像
docker pull mysql
????正常情況下單數據庫啟動
????docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
主從數據庫讀寫分離(數據庫配置相關)
我這里用的是兩臺虛擬機進行配置的? ??
? ??創(chuàng)建docker的文件掛載目錄(主從數據庫都創(chuàng)建出來)
? ??在宿主機上創(chuàng)建兩個文件夾:
????/etc/mysql/conf.d 存放配置文件
????/etc/mysql/data 存放MySQL數據
配置mysql 數據庫
在創(chuàng)建好的/etc/mysql/conf.d 位置 創(chuàng)建 my.cnf 文件
主數據庫配置文件數據如下:
{
[mysqld]
pid-file? ? ? ? = /var/run/mysqld/mysqld.pid
socket? ? ? ? ? = /var/run/mysqld/mysqld.sock
datadir? ? ? ? = /var/lib/mysql
secure-file-priv= NULL
#server-id //[必須]服務器唯一ID,默認是1渤愁,一般取IP最后一段
server-id = 1
#log-bin [必須]啟用二進制日志
log-bin = master-bin
character-set-server=UTF8MB4
default-storage-engine=INNODB
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
[mysql]
default-character-set=UTF8MB4
}
從數據庫配置文件數據如下:
{
[mysqld]
pid-file? ? ? ? = /var/run/mysqld/mysqld.pid
socket? ? ? ? ? = /var/run/mysqld/mysqld.sock
datadir? ? ? ? = /var/lib/mysql
secure-file-priv= NULL
server-id = 2 #[必須]服務器唯一ID君珠,從數據庫id铆惑,一般取IP最后一段
skip-log-bin? # slave關閉命令日志 減少延時
relay-log = slave-relay-bin
log-slave-updates = 1
read-only = 1
character-set-server=UTF8MB4
default-storage-engine=INNODB
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
[mysql]
default-character-set=UTF8MB4
}
配置完成后:
運行主數據庫
docker run --name mysql-magter -v /etc/mysql/conf.d:/etc/mysql/conf.d -v /etc/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3308:3306 mysql:latest
運行從數據庫
docker run --name mysql-slave -v /etc/mysql/conf.d:/etc/mysql/conf.d -v /etc/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3308:3306 mysql:latest
進入數據庫容器
dpcker exec -it 數據庫名 bash
數據庫名 也可以是 容器ID
docker ps -a 命令里面查看到
因為MySQL8.0版本的密碼加密方式跟5.7版本不一樣了,這里還是改成5.7版本的密碼加密方式,不然的話,navicat這類客戶端連接工具是連不上的,從庫連接主庫也可能會有問題
mysql> flush privileges;
mysql> GRANT ALL ON *.* TO 'root'@'%';
mysql> ALTER USER 'root'@'%' IDENTIFIED BY '數據庫密碼' PASSWORD EXPIRE NEVER;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '數據庫密碼';
主從服務器 都給更改一下加密方式
在主數據庫里執(zhí)行
mysql>show master status;
在從數據庫里執(zhí)行
mysql>?change master to master_host = '主數據庫IP地址',master_user = '主數據庫用戶', master_password = '主數據庫密碼',master_port=設置的主數據庫對外端口號(默認3306的情況下可以不需要這一設置), master_log_file = '查詢到主數據庫的master File值 ',master_log_pos = 查詢到主數據庫的master Position值;
執(zhí)行完后?
mysql>start slave
不帶任何參數,表示同時啟動I/O 線程和SQL線程吉拳。
I/O線程從主庫讀取bin log娃循,并存儲到relay log中繼日志文件中。
SQL線程讀取中繼日志窖剑,解析后跃脊,在從庫重放。
查看配置結果
mysql>show slave satus\G
如下兩個值都顯示 yes 的時候 表示配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes