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
在主库插入新的数据,到从库去验证表中数据是否同步。