栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

MySQL 配置主从复制测试

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL 配置主从复制测试

步骤
    修改主、从服务器配置并重启主服务器查看当前bin文件和位置,在从服务器上设置, 并启动
# 主服务器运行sql
#   如果主服务器之前有数据,或正在持续读写,需要同步之前数据则加锁手动dump
#   flush table with read lock;
#   mysqldump 到 从服务器
show master status;
#   unlock tables;

# 从服务器运行
#   直接用root同步,省略单独建账户步骤
CHANGE MASTER TO MASTER_HOST='主服务器地址', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='MYSQL_ROOT_PASSWORD', MASTER_LOG_FILE='MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS; 
start slave;
    主服务新建数据库,表,插入数据,从服务器上验证
master/my.cnf
[mysqld]
log-bin = /var/lib/mysql/binlog
server-id = 1
; binlog_do_db = db1    # 需同步的DB, 默认全部
; binlog_do_db = db2
; binlog_ignore_db = db3 # 忽略的DB
; binlog_ignore_db = db4
slaver1/my.cnf
[mysqld]
server-id = 21  # 每台服务器名字不一样即可
; binlog_do_db = db1    # 需同步的DB, 默认全部
; binlog_do_db = db2
; binlog_ignore_db = db3 # 忽略的DB
; binlog_ignore_db = db4
slaver2/my.cnf
[mysqld]
server-id = 22
; binlog_do_db = db1    # 需同步的DB, 默认全部
; binlog_do_db = db2
; binlog_ignore_db = db3 # 忽略的DB
; binlog_ignore_db = db4
使用docker启动三个mysql测试
#!/usr/bin/bash
set -e

MYSQL_ROOT_PASSWORD="123"

echo "正在创建一主二从Mysql"
docker run --name mysql-master -h mysql-master -e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" -d mysql:5.7
docker run --name mysql-slaver1 -h mysql-slaver1 --link mysql-master:master -e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" -d mysql:5.7
docker run --name mysql-slaver2 -h mysql-slaver2 --link mysql-master:master -e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" -d mysql:5.7

echo "正在修改my.cnf配置文件"
docker exec mysql-master bash -c 'cat << EOF >> /etc/mysql/my.cnf
[mysqld]
log-bin = /var/lib/mysql/binlog
server-id = 1
EOF'

docker exec mysql-slaver1 bash -c 'cat << EOF >> /etc/mysql/my.cnf
[mysqld]
server-id = 21
EOF'

docker exec mysql-slaver2 bash -c 'cat << EOF >> /etc/mysql/my.cnf
[mysqld]
server-id = 22
EOF'

echo "正在重启所有Mysql服务器"
sleep 5s
docker restart mysql-master mysql-slaver1 mysql-slaver2


# 全新安装,不考虑主服务器之前需要同步的数据
# 如需同步之前数据,先锁定主服务器只读,mysqldump出数据
# 手动备份到从服务器再执行同步配置
echo "正在获取主服务器log_bin文件和位置"
_tmp=$(docker exec -i mysql-master mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "flush table with read lock; show master statusG unlock tables")
MASTER_LOG_FILE=$(echo "$_tmp" | awk '/File:/ {print $2}')
MASTER_LOG_POS=$(echo "$_tmp" | awk '/Position:/ {print $2}')
echo "----------------------------"
echo "  File: $MASTER_LOG_FILE"
echo "  Position: $MASTER_LOG_POS"
echo "----------------------------"

echo "正在设置从服务器同步配置"
sleep 5
docker exec mysql-slaver1 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CHANGE MASTER TO MASTER_HOST='master', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='$MYSQL_ROOT_PASSWORD', MASTER_LOG_FILE='$MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS; start slave"

docker exec mysql-slaver2 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CHANGE MASTER TO MASTER_HOST='master', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='$MYSQL_ROOT_PASSWORD', MASTER_LOG_FILE='$MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS; start slave"

echo "设置完成, 查看从服务器运行状态"
sleep 5
echo "----------------------------"
docker exec mysql-slaver1 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "show slave statusG" | grep -iP "IO_Running|SQL_Running"
docker exec mysql-slaver2 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "show slave statusG" | grep -iP "IO_Running|SQL_Running"
echo "----------------------------"

# 输出
正在创建一主二从Mysql
048e5f4b09c05364176ec1cebc76b0cc090af54994e3708d21a71a9c6cabba86
1ceabd786c752eb30fa5eef8308f1756fd339c9cc8dfe2004adcc699885b89b2
05056dfe221304c722d04654ffe28913117c2c39c59290f109111c36710235ff
正在修改my.cnf配置文件
正在重启所有Mysql服务器
mysql-master
mysql-slaver1
mysql-slaver2
正在获取主服务器log_bin文件和位置
mysql: [Warning] Using a password on the command line interface can be insecure.
----------------------------
  File: binlog.000003
  Position: 154
----------------------------
正在设置从服务器同步配置
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
设置完成, 查看从服务器运行状态
----------------------------
mysql: [Warning] Using a password on the command line interface can be insecure.
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
mysql: [Warning] Using a password on the command line interface can be insecure.
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
----------------------------
测试验证



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741113.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号