Mysql 数据库主从部署

原理

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容