MySQL主从复制与主主复制

简介

MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器(这篇博客暂时不涉及)。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。

主从复制

  • 修改配置
修改 `/etc/my.cnf`
log-bin=mysql-bin #开启二进制日志
server-id=11 # 主从配置,每个mysql server 要保证 id唯一性
# 重启服务
systemctl restart  mysqld.service

注意:二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。

192.168.18.136  为主数据库服务器
192.168.18.137  为从数据库服务器
  • 在192.168.18.136中创建一个192.168.18.137主机中可以登录的MySQL用户
用户:mysqle1
密码:mysqle1
mysql>CREATE USER 'mysqle1'@'%' IDENTIFIED BY 'mysqle1';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'mysqle1'@'%';
mysql>FLUSH PRIVILEGES;
  • 查看 192.168.18.136 MySQL服务器二进制文件名与位置
mysql>SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      155 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  • 告知二进制文件名与位置 在192.168.18.137中执行:
mysql>CHANGE MASTER TO
     >MASTER_HOST='192.168.18.136',
     >MASTER_USER='mysqle2',
     >MASTER_PASSWORD='mysqle2',
     >MASTER_LOG_FILE='mysql-bin.000001',
     >MASTER_LOG_POS=155;

mysql>START SLAVE;   #开启复制
mysql>SHOW SLAVE STATUS\G   #查看主从复制是否配置成功
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.18.136
                  Master_User: mysqle2
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 155
               Relay_Log_File: localhost-relay-bin.000004
                Relay_Log_Pos: 369
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              ...
***************************

主主复制

  • 修改 /etc/my.cnf
-- 192.168.18.136
server-id=11   #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql   #忽略mysql库【msyql8 不可用】
#binlog-ignore=information_schema   #忽略information_schema库【msyql8 不可用】
#replicate-do-db=aa   #要同步的数据库,默认所有库

-- 192.168.18.137
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
#replicate-do-db=aa
配置好后重启MySQL
  • 在192.168.18.137中创建一个192.168.18.136主机中可以登录的MySQL用户
用户:mysqle1
密码:mysqle1
mysql>CREATE USER 'mysqle2'@'%' IDENTIFIED BY 'mysqle2';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'mysqle2'@'%';
mysql>FLUSH PRIVILEGES;
  • 查看 192.168.18.137 MySQL服务器二进制文件名与位置
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      416 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  • 告知二进制文件名与位置 在192.168.18.136 中执行:
mysql>CHANGE MASTER TO
     >MASTER_HOST='192.168.18.137',
     >MASTER_USER='mysqle2',
     >MASTER_PASSWORD='mysqle2',
     >MASTER_LOG_FILE='mysql-bin.000001',
     >MASTER_LOG_POS=416;

mysql>START SLAVE;   #开启复制
mysql>SHOW SLAVE STATUS\G   #查看主从复制是否配置成功

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值