现在配置salve
[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
read_only=1
配置Slave
类似于Master,使用docker命令docker exec -it mysql-slave /bin/bash 进入到slave容器中,进入到etc/mysql路径,使用vim命令编辑my.cnf文件:
[mysqld]
设置server_id,注意要唯一
server-id=101
开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
relay_log配置中继日志
relay_log=mysql-relay-bin
read_only=1 ## 设置为只读,该项如果不设置,表示slave可读可写
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
bash-4.2# cd etc
bash-4.2# ls
DIR_COLORS csh.cshrc gnupg hosts.deny libuser.conf mysql pki rc0.d rsyslog.d subgid xdg
DIR_COLORS.256color csh.login groff init.d localtime nsswitch.conf pm rc1.d sasl2 subuid xinetd.d
DIR_COLORS.lightbgcolor dbus-1 group inputrc login.defs nsswitch.conf.bak popt.d rc2.d securetty sysconfig yum
GREP_COLORS default group- issue logrotate.d openldap prelink.conf.d rc3.d security sysctl.d yum.conf
X11 depmod.d gshadow issue.net machine-id opt printcap rc4.d selinux system-release yum.repos.d
aliases dracut.conf gshadow- krb5.conf modprobe.d oracle-release profile rc5.d services system-release-cpe
alternatives dracut.conf.d gss krb5.conf.d modules-load.d os-release profile.d rc6.d shadow systemd
bash_completion.d environment host.conf ld.so.cache motd pam.d protocols redhat-release shadow- terminfo
bashrc exports hostname ld.so.conf mtab passwd python resolv.conf shells tmpfiles.d
binfmt.d filesystems hosts ld.so.conf.d my.cnf passwd- rc.d rpc skel udev
chkconfig.d gcrypt hosts.allow libaudit.conf my.cnf.d pkcs11 rc.local rpm ssl vimrc
bash-4.2# vim my.cnf
mysqladmin -u root -p shutdown 这个用了会报错我们选择直接重启容器
docker restart 容器id
开启Master-Slave主从复制
进入Master库mysql客户端:输入show master status
查看Master状态:
[root@VM-0-16-centos ~]# docker exec -it mysql-master /bin/bash
bash-4.2# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.43-log MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> show master status
-> ^C
mysql> show master status;
+——————-+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————-+———-+————–+——————+——————-+
| master-bin.000001 | 617 | mysql | | |
+——————-+———-+————–+——————+——————-+
1 row in set (0.00 sec)
记住File和Position,后面需要用到。
+——————-+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————-+———-+————–+——————+——————-+
| master-bin.000001 | 617 | mysql | | |
+——————-+———-+————–+——————+——————-+
此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。
进入到Slave库myslq客户端,执行如下命令:
change master to master_host=’172.18.0.3′, master_user=’slave’, master_password=’123456′, master_port=3306, master_log_file=’master-bin.000001′, master_log_pos=617, master_connect_retry=30;
这是一个用于配置 MySQL 复制的 CHANGE MASTER TO
命令,用于将 MySQL 服务器设置为一个复制从属服务器(replication slave),并指定主服务器的连接参数。以下是对这个命令的解释:
master_host='172.18.0.3'
: 这是主服务器的主机名或IP地址。在这里,主服务器的地址是172.18.0.3
。从属服务器将连接到这个主机以获取复制数据。master_user='slave'
: 这是在主服务器上用于复制的用户名。通常,这是在主服务器上创建的一个具有复制权限的用户。在这里,用户名是'slave'
。master_password='123456'
: 这是用于连接到主服务器的密码。这个密码应该与在主服务器上创建的复制用户的密码相匹配。在这里,密码是'123456'
。请注意,明文存储密码不是最佳的安全做法,通常应该使用加密或认证插件来保护密码。master_port=3306
: 这是主服务器上MySQL服务的端口号。通常,MySQL使用3306端口。如果主服务器在不同的端口上运行,应该将这个值更改为主服务器的端口号。master_log_file='master-bin.000001'
: 这是二进制日志文件的名称,从属服务器将从这个文件开始读取并复制数据。这个值应该与主服务器上当前二进制日志文件的名称相匹配。master_log_pos=617
: 这是二进制日志文件中的位置,从属服务器将从这个位置开始读取并复制数据。这个值是一个偏移量,指示复制的起始点。master_connect_retry=30
: 这是从属服务器尝试连接到主服务器的时间间隔(以秒为单位)。如果从属服务器无法连接到主服务器,它将等待指定的时间后再次尝试连接。
此命令的目的是配置从属服务器,以便它可以连接到主服务器,并从指定的二进制日志文件和位置开始复制数据。这通常用于设置MySQL复制,其中一个MySQL服务器(主服务器)用于写入数据,而另一个MySQL服务器(从属服务器)用于读取并复制数据,以实现数据备份、负载均衡等目的。