若想实现MySQL读写分离需提前准备工具如下:
一、首先进入Putty工具使用Docker命令拉取MySQL镜像
根据需要拉取下载Mysql对应版本的镜像
docker pull mysql //拉取最新的镜像
docker pull mysql:5.7 //拉取MySql5.7版本的镜像
二、启动MySQL容器,配置主从MySQL
首先在阿里云加入安全组3306 3307 或者3306/3310区间即可
配置主MySQL
参数详解:
// -d守护进程
// -p端口映射 -p 宿主机端口:容器端口
// --privileged=true 应用容器 获取宿主机root权限
// -v 绑定共享映射目录,-v 宿主机目录:容器目录
docker run -d -p 3306:3306 --privileged=true -v ~/docker_data/mysql-master/log:/var/log/mysql -v ~/docker_data/mysql-master/data:/var/lib/mysql -v ~/docker_data/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql
若指定mysql版本之后 需要在指定位置 --name mysql-master mysql:版本 例子 mysql:5.7
配置从MySQL
参数详解:
// -d守护进程
// -p端口映射 -p 宿主机端口:容器端口
// --privileged=true 应用容器 获取宿主机root权限
// -v 绑定共享映射目录,-v 宿主机目录:容器目录
docker run -d -p 3307:3306 --privileged=true -v ~/docker_data/mysql-slave/log:/var/log/mysql -v ~/docker_data/mysql-slave/data:/var/lib/mysql -v ~/docker_data/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql
若指定mysql版本之后 需要在指定位置 --name mysql-master mysql:版本 例子 mysql:5.7
三、查看MySQL配置是否成功
打开Xftp工具连接远程阿里云服务器,找到安装MySQL主从配置挂载的位置
2、Docker ps -a 查看运行中所有的容器
四、配置my.cnf文件
配置主库master的my.cnf文件
[mysqld]## 设置server_id 同一局域网中需要唯一
server_id=101## 指定不需要同步的数据库名称
binlog-ignore-db=mysql## 开启二进制日志功能
log-bin=mall-mysql-bin## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M## 设置使用的二进制日志格式(mixed,stateement,row)
binlog_format=mixed## 二进制日志过期清理时间 默认值为0 表示不自动清理
expire_logs_days=7## 跳过主从复制值遇到的所有错误或指定类型的错误,避免slave端复制中断## 如:1062错误是指一些主键重复 1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
配置从库slave的my.cnf文件
[mysqld]## 设置server_id 同一局域网中需要唯一
server_id=102## 指定不需要同步的数据库名称
binlog-ignore-db=mysql## 开启二进制日志功能
log-bin=mall-mysql-slave1-bin## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M## 设置使用的二进制日志格式(mixed,stateement,row)
binlog_format=mixed## 二进制日志过期清理时间 默认值为0 表示不自动清理
expire_logs_days=7## 跳过主从复制值遇到的所有错误或指定类型的错误,避免slave端复制中断## 如:1062错误是指一些主键重复 1032错误是因为主从数据库数据不一致
slave_skip_errors=1062## relay_log配置中继日志
relay_log=mall-mysql-relay-bin## log_slave_updates表示slave将复制事件写进自己的二进制日志中
log_slave_updates=1## slave设置为只读(具有super权限的用户除外)
read_only=1
五、创建服务器配置读写分离
创建主服务器用户并查询状态
//重启主库容器
docker restart mysql-master //进入主库容器
docker exec -it mysql-master /bin/bash//进入容器命令行后进入mysql终端
mysql -uroot -p123456 //新建slave用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';//给slave用户分配权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';//查询主服务器状态
show master status;
此处安全提醒红框内数据是活数据,需根据自己查看的实际情况记录
show master status;
此处命令可能存在问题是不显示数据,你可以使用下边步骤先切换到slave从库配置,然后返回主库master再次配置
如从当前主MySQL配置退出,可以使用Docker命令 exit 直接退回上一级目录
创建从服务器
//重启从库容器
docker restart mysql-slave //进入从库容器
docker exec -it mysql-slave /bin/bash //进入容器命令行后进入mysql终端
mysql -uroot -p123456 //查看从库服务器状态
show slave status \G;
slave配置连接master
// slave配置连接master
// master_host 宿主机ip
// master_user 刚刚创建的主库用户
// master_password 刚刚创建的主库用户密码
// master_port 主库端口号
// master_log_file 刚刚在主库通过show master status;查询出来的File名称
// master_log_pos 刚刚在主库通过show master status;查询出来的Position
// master_connect_retry 重连的时间间隔
change master to master_host='192.168.1.10', //192.168.1.10更改为阿里云公网自己的
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mall-mysql-bin.000001', //mall-mysql-bin.000001同理更改
master_log_pos=1177, //1177更改为自己的
master_connect_retry=30;
//开启主从复制
start slave;//查询查询从库状态
show slave status \G;
此时,目录中 Slave_IO_Running 与 Slave_SQL_Running 都为 Yes 即说明可以实现读写分离了,也就配置成功了
六、测试MySQL读写分离是否成功
连接阿里云MySQL两台主从服务器,建库建表
注意:成功之后即可根据需要搭建MySQL集群,多建立几个slave从库,配置my.cnf文件执行从库配置操作,便可实现集群一主多从的搭建。