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