原理
image.png
同样今天使用docker来模拟mysql的服务
1.主库配置
在本地配置数据库配置文件
# log_bin
## 设置server_id,注意要唯一
### 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
[mysqld]
server-id=101
log-bin = mysql-bin
default-time_zone = '+8:00'
#日志自动过时清理天数
expire_logs_days = 7
#要给从机同步的库
#binlog-do-db=hl
#不给从机同步的库(这里不同步mysql、information_schema、performance_schema、sys库)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#binlog-ignore-db=performance_schema
#binlog-ignore-db=sys
重要的server-id必须为唯一,log-bin 必须开启
binlog-do-db是要同步的数据库,binlog-ignore-db是不需要同步的数据库,这里先不配置
然后配置文件挂载,启动docker容器,这里用的是mysql5.6
docker run --name mysql1
--network sql_net -d -p 3326:3306
-v d:\www\mysql\sql1\log:/var/log/mysql
-v d:\www\mysql\sql1\data:/var/lib/mysql
-v d:\www\mysql\sql1\conf\conf.d:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
记得新建一个共用网络。
docker network create --driver=bridge --subnet=192.168.10.0/24 --gateway=192.168.10.1 sql_net
然后可以使用本地数据库工具连接这个mysql了 ,在查询里运行:
1.创建slave账号 密码为123456, 'slave'@'%' 的%为最高权限。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
2.将replication slave,replication client 授权到slave用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4、刷新权限
FLUSH PRIVILEGES;
5、查看主库status
show master status;
image.png
这里可以看到bin_log文件名称及文件位置。如果查不到文件的话。
使用以下命令
show VARIABLES like '%log_bin%';
image.png
查看如果log_bin的值部位ON,则是因为没有成功开启binlog,去检查配置文件吧。
2.从库配置
[mysqld]
server_id = 102 #设置slave1 id为102,slave2 id为103
log-bin = mysql-bin # 开启二进制日志(必须)
relay-log=relay-log-bin #开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index #定义中继日志文件的位置和名称
relay_log_recovery = 1 #选配项
#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。
这里最重要的就是server_id 是必须的,其他的配置项是可选的。
然后配置文件挂载,启动docker容器
docker run --name mysql2 --network sql_net -d -p 3336:3306 -v d:\www\mysql\sql2\log:/var/log/mysql -v d:\www\mysql\sql2\data:/var/lib/mysql -v d:\www\mysql\sql2\conf\conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
连接mysql2 数据库。
1.连接主数据库
MASTER_HOST:主数据库的ip
MASTER_USER:主数据库创建的从用户名
MASTER_PASSWORD:用户名密码
MASTER_LOG_FILE:binlog文件名称
MASTER_LOG_POS:binlog文件的位置
CHANGE MASTER TO
MASTER_HOST='192.168.10.2',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=199;
2.开启从服务
START SLAVE;
3.查看从数据库
SHOW SLAVE STATUS;
image.png
数据库中Slave_IO_Running和Slave_SQL_Running都为Yes即可正常
3.测试主从同步
在主数据库创建数据库 数据表 添加表数据,刷新从数据库就可以看到数据
image.png