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

  

posted @ 2023-01-10 09:37  无心々菜  阅读(242)  评论(0编辑  收藏  举报