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

你可能感兴趣的:(Centos7 docker mysql 读写分离安装配置)