Mysql主从

本文详细介绍了如何在Docker容器中搭建MySQL的主从复制。首先,在主数据库中通过`showmasterstatusG`获取状态信息,然后在Slave节点使用这些信息配置`CHANGE MASTER TO`命令。接着,设置`SQL_SLAVE_SKIP_COUNTER`来跳过指定数量的事务,确保从库同步。最后,使用`showslavestatusG`检查主从同步状态,确保一切正常运行。

基于Docker的Mysql主从复制搭建 - CoderFocus - 博客园

在master中mysql终端执行show master status \G;查看主数据库的状态

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

命令说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 (主)File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的(主)Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。

设置跳过多少个事务
命令:SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

### 获取当前服务器IP地址并配置MySQL主从复制 #### 获取当前服务器的IP地址 在Linux系统中,可以通过多种方式获取当前服务器的IP地址。以下是一些常用的方法: ##### 使用 `hostname` 命令获取IP地址 ```bash ip=$(hostname -I) echo "本机 IP 地址为:$ip" [^3] ``` ##### 使用 `ifconfig` 命令获取IP地址 ```bash ip=$(ifconfig | grep -E 'inet [0-9]' | awk '{print $2}') echo "本机 IP 地址为:$ip" [^3] ``` ##### 获取IP地址的最后一位 ```bash ip_last=$(ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:" | cut -d'.' -f4) echo "当前 IP 地址的最后一位为:$ip_last" [^4] ``` #### 配置MySQL主从复制 MySQL主从复制是一种常见的数据库高可用方案,主服务器将数据更改记录到二进制日志中,从服务器读取这些日志并在本地重放,从而实现数据同步。 ##### 在主服务器上配置复制用户 在主服务器上创建一个用于复制的用户,并授予相应的权限: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; eof" ``` 刷新权限以确保新创建的用户生效: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -h${mysql_address} -P${master_port} -u${mysql_user} -p${mysql_passwd} -e 'flush privileges;'" ``` ##### 在从服务器上配置主服务器信息 在从服务器上执行以下命令,连接到主服务器并设置复制信息: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos= 4; eof" ``` 启动从服务器的复制进程: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'start slave;'" ``` ##### 检查从服务器状态 可以通过以下命令检查从服务器的复制状态: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 确保输出中的 `Slave_IO_Running` 和 `Slave_SQL_Running` 状态为 `Yes`,表示复制正常运行。 #### 示例:完整配置流程 以下是一个完整的Shell脚本示例,展示了如何获取当前服务器的IP地址,并配置MySQL主从复制: ```bash #!/bin/bash # 获取当前服务器的IP地址 ip=$(hostname -I) # 主服务器和从服务器的名称 master_name="mysql-master" slave_name="mysql-slave" # MySQL相关参数 mysql_user="root" mysql_passwd="root_password" replication_user="replica_user" master_ip="192.168.1.100" # 主服务器IP地址 # 在主服务器上创建复制用户 docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; flush privileges; eof" # 在从服务器上配置主服务器信息 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos=4; start slave; eof" # 检查从服务器状态 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 通过上述步骤,可以实现MySQL主从复制的配置,并利用Shell脚本自动化相关操作。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值