Centos7 docker mysql 讀寫分離安裝配置

docker 下載mysql鏡像

docker pull mysql

????正常情況下單數據庫啟動

????docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

主從數據庫讀寫分離(數據庫配置相關)

我這里用的是兩臺虛擬機進行配置的? ??

? ??創建docker的文件掛載目錄(主從數據庫都創建出來)

? ??在宿主機上創建兩個文件夾:

????/etc/mysql/conf.d 存放配置文件

????/etc/mysql/data 存放MySQL數據

配置mysql 數據庫

在創建好的/etc/mysql/conf.d 位置 創建 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 '數據庫密碼';

主從服務器 都給更改一下加密方式

在主數據庫里執行

mysql>show master status;

在從數據庫里執行

mysql>?change master to master_host = '主數據庫IP地址',master_user = '主數據庫用戶', master_password = '主數據庫密碼',master_port=設置的主數據庫對外端口號(默認3306的情況下可以不需要這一設置), master_log_file = '查詢到主數據庫的master File值 ',master_log_pos = 查詢到主數據庫的master Position值;

執行完后?

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容