前期准备好docker环境,因为最近自己在学shardingsphere-jdbc的分库分表+读写分离。
搭建主从复制就是为了读写分离做准备
第一步:安装Mysql 8.0
我这里使用的是mysql8.0版本, 命令:docker pull mysql:8.0
在第二步之前可以随便启动Mysql,然后将my.cnf配置文件拉取到服务器位置
docker cp [容器id]:/etc/mysql/my.cnf /home/mysql/master/
第二步:启动mysql(2个 3306和3307端口)
3306:master
3307: slaver
这里-v 映射位置提前自己创建好(我自己的/home/mysql)
先启动master数据库
docker run -d --name mysql8-master -p 3306:3306 -v /home/mysql/master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=xiaowan mysql:8.0
再启动slave数据库
docker run -d --name mysql8-slave -p 3307:3306 -v /home/mysql/slaver/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=xiaowan mysql:8.0
第三步: 配置下my.cnf文件(/home/mysql/下面的master和slaver)
这里为什么要配置呢?因为后面启动slave的时候如果server-id不区分会报错
master
log-bin=mysql-bin
server-id=1
slave
log-bin=mysql-bin
server-id=2
第四步:开始配置主从关系
配置之前可以自己用电脑工具测试是否能远程链接服务器的数据库
如果链接补上的话,可以进入容器的mysql里面按照下面配置一下(密码啥的自己改)
ALTER USER 'root'@'%' IDENTIFIED BY 'xiaowan' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xiaowan';
FLUSH PRIVILEGES;
接下来开始配置主从关系
4.1、进入主容器(主数据库mysql8-master)
docker exec -it mysql8-master /bin/bash
进入容器之后进入mysql
mysql -u root -p
进入mysql以后,执行以下命令
设置log
set session binlog_format=STATEMENT;
重点这里通过以下命令去查看File和Postition(配置从数据库要用到)
show master status;
我的File:mysql-bin.000003
我的Position:156
4.2、配置从容器(从数据库mysql8-slave)
注意点: 在配置之前通过下面可以先去查看数据库的验证方式
use mysql;
select user,host,plugin from user;
先进入到从数据库里面,然后将上面的File和Position放入以下配置并执行
CHANGE MASTER TO
MASTER_HOST='xxxx',// 这里需要填写你自己的服务器地址
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='xiaowan',
master_log_file='mysql-bin.000003',
master_log_pos=156,
master_connect_retry=60;
如果数据库的验证方式是上图的:caching_sha2_password,则需要指定GET_MASTER_PUBLIC_KEY=1;
CHANGE MASTER TO
MASTER_HOST='xxxx',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='xiaowan',
master_log_file='mysql-bin.000003',
master_log_pos=156,
master_connect_retry=60,
GET_MASTER_PUBLIC_KEY=1;
然后启动从数据库 START SLAVE;
最后通过show slave status\G;
命令查看是否成功
如果显示都是yes就是成功了