Mysql 主从复制搭建过程

 

 

0x00 环境

centos7.9,Docker,Mysql5.7

Docker配置略

0x01 启动容器

主库

docker run -d -name mysql_master --restart=always -e MYSQL_ROOT_PASSWORD=密码 -p 33061:3306 -h master \

--net=mynet --ip=172.16.1.100 -v /mysqltest/master/conf.d:/etc/mysql/conf.d \ mysql:5.7.30

从库1

docker run -d -name mysql_slave1 --restart=always - MYSQL_ROOT_PASSWORD=密码 -p 33062:3306 -h slave1 \
--net=mynet --ip=172.16.1.101 -v /mysqltest/slave1/conf.d:/etc/mysql/conf.d \ mysql:5.7.30

从库2

docker run -d -name mysql_slave2 --restart=always -e MYSQL_ROOT_PASSWORD=密码 -p 33063:3306 -h slave2 \

--net=mynet --ip=172.16.1.102 -v /mysqltest/slave2/conf.d:/etc/mysql/conf.d \ mysql:5.7.30

0x02 配置文件

主库

cat  >/mysqltest/master/conf.d/my.cnf <<EOF
[mysqld]
port=3306
character_set_server-utf8mb4
secure_file_priv=
server-id=1001
log-bin=   #binlog打开
binlog_format=row
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
skip-name-resolve
gtid-mode=on #主从复制的模式 一定要打开
enforce-gtid-consistency=on  #强制复制的开关,打开
report_host=172.16.1.100  #本机host ip地址
EOF

从库1参数

cat  >/mysqltest/slave1/conf.d/my.cnf <<EOF
[mysqld]
port=3306
character_set_server-utf8mb4
secure_file_priv=
server-id=1002
log-bin=   #binlog打开
binlog_format=row
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
skip-name-resolve
gtid-mode=on #主从复制的模式 一定要打开
enforce-gtid-consistency=on  #强制复制的开关,打开
report_host=172.16.1.100  #本机主机ip地址
EOF

从库2参数文件

cat  >/mysqltest/slave2/conf.d/my.cnf <<EOF
[mysqld]
port=3306
character_set_server-utf8mb4
secure_file_priv=
server-id=1003
log-bin=   #binlog打开
binlog_format=row
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
skip-name-resolve
gtid-mode=on #主从复制的模式 一定要打开
enforce-gtid-consistency=on  #强制复制的开关,打开
report_host=172.16.1.102  #主机ip地址
EOF

重启3个容器

0x03 主库创建用户,数据库和表,查看配置

#远程登录容器数据库,通过宿主机和不同的端口号
mysql -uroot -p密码 -h宿主机IP地址 -p端口号{33061,33062,33063}
#授予用户repl 用于同步复制给从库的权限,mysql可以通过create,grant和insert into mysql.user表三种方式来创建新的用户
grant replication slave on *.* to repl@'%' identified by '密码'
#查询用户信息
select user,host,grant_priv,password_last_change,authentication_string from mysql.user;
flush privileges;
#创建数据库和表
create database db;
use db;
create table mytab1 (id int,name varchar(30));
insert into mytab1 values (1,'a'),(2,'b');
commit;
#查看binlog是否打开
show variables like '%log_bin%';

0x04 配置从库

从库1

登录从库1的mysql>命令行

change master to master_host='主库IP'
master_port=3306
master_user='主库同步的用户'
master_password='用户密码'
master_auto_position=1;

然后启动从库1

start slave;

那么启动后如何查看确认从库的状态呢?

可以通过如下命令查看

mysql> show slave status \G

从库2

登录从库2的mysql命令行

change master to master_host='主库IP'
master_port=3306
master_user='主库同步的用户'
master_password='用户密码'
master_auto_position=1;

启动从库2

start slave;

同样通过命令验证即可

show slave status \G

在主库插入新的数据,到从库去验证表中数据是否同步。

posted @ 2022-10-05 16:55  BlackData  阅读(169)  评论(0编辑  收藏  举报