mysql 之主从配置
mysql 之主从配置
本文测试环境:
Centos7 - Docker
主:192.168.91.128:3309(docker容器)
从:192.168.91.128:3310(docker容器)
1. 创建数据库
1) 拉取镜像
docker pull mysql
2) 创建主、从数据库
a. 主数据库
创建容器
docker run -p 3309:3306 --name mysql-master \ -v /home/docker/mysql/mysql-master/log:/var/log/mysql \ -v /home/docker/mysql/mysql-master/data:/var/lib/mysql \ -v /home/docker/mysql/mysql-master/conf:/etc/mysql \ -v /home/docker/mysql/mysql-master/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql
创建配置文件
cd /home/docker/mysql/mysql-master/conf/
vim my.cnf
[mysqld] ## 设置server_id,同一局域网中需要唯一 主小于从 server_id=1 ## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
binlog-ignore-db=db1
## 指定需要同步的数据库名称
binlog-do-db=db2
binlog-do-db=db3
## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=100M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=row ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=14 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062,1032,1053,1146
## 设置大小写是否敏感,比较的时候是不区分大小写,兼容Linux
lower_case_table_names=1
重启数据库
docker restart mysql-master
进入容器
docker exec -it mysql-master bash
进入mysql
mysql -uroot -proot
验证 server_id
SHOW VARIABLES LIKE 'server_id'
## 如未修改成功,有可能优先读取的其他配置文件,可在使用root登录mysql后,使用以下命令重置 server_id
SET GLOBAL server_id=1;
设置远程登录
use mysql ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;
查看日志文件
show master status;
b. 从数据库
docker run -p 3310:3306 --name mysql-slave \ -v /home/docker/mysql/mysql-slave/log:/var/log/mysql \ -v /home/docker/mysql/mysql-slave/data:/var/lib/mysql \ -v /home/docker/mysql/mysql-slave/conf:/etc/mysql \ -v /home/docker/mysql/mysql-master/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql
创建配置文件
cd /home/docker/mysql/mysql-slave/conf/
vim my.cnf
[mysqld] ## 设置server_id,同一局域网中需要唯一 主小于从 server_id=2 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=100M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=row ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=14 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062,1032,1053,1146
## 设置大小写是否敏感,比较的时候是不区分大小写,兼容Linux
lower_case_table_names=1
## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
重启数据库
docker restart mysql-slave
进入容器
docker exec -it mysql-slave bash
进入mysql
mysql -uroot -proot
验证 server_id
SHOW VARIABLES LIKE 'server_id'
## 如未修改成功,有可能优先读取的其他配置文件,可在使用root登录mysql后,使用以下命令重置 server_id
SET GLOBAL server_id=1;
设置远程登录
use mysql ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;
配置 slave
注意:如主数据库重启,会重新生成 master 信息,这块 slave 需要重新配置
注意:配置前 先在从库中 创建需同步的数据库(至少先创建空数据库)
stop slave; ## 关闭 slave
配置出master的信息
master_host为主机地址
master_log_file为主数据库日志名称
change master to master_host='192.168.91.128',master_port=3309,master_user='root',master_password='root',master_log_file='mall-mysql-bin.000001',master_log_pos=0;
start slave; ## 开启 slave,如不能启动 可使用 reset slave ;
显示slave状态
show slave status \G;
4. 验证主从关系
1)主从服务都重新启动.
2)在主数据库中新建数据库,新建表,添加数据,观察从数据库的状态.
create database demo1 default character set utf8;
3)新数据查看是否有该数据库,有则说明配置成功。
参考:https://blog.csdn.net/u014014014/article/details/128051547