当前位置: 代码网 > it编程>数据库>Mysql > MySQL互为主从数据同步部署操作方式

MySQL互为主从数据同步部署操作方式

2025年10月21日 Mysql 我要评论
在mysql数据库管理中,实现互为主从的配置是一种常见的高可用性和数据冗余策略。这种配置允许两个mysql服务器相互复制数据,每个服务器既是对方的主服务器也是从服务器。这样,无论哪个服务器发生故障,另

在mysql数据库管理中,实现互为主从的配置是一种常见的高可用性和数据冗余策略。

这种配置允许两个mysql服务器相互复制数据,每个服务器既是对方的主服务器也是从服务器。

这样,无论哪个服务器发生故障,另一个都可以接管,保证数据的持续可用性和一致性。

一、环境准备

  • 准备两台虚拟机(192.168.4.51 192.168.4.52)
  • 关闭防火墙和selinux
  • 确保两台虚拟机网络互通
  • 两台虚拟机都安装了mysql(5.7及以上的版本)

二、配置互为主从

1.编辑/etc/my.cnf文件

vim /etc/my.cnf

在[mysqld]模块下添加以下代码段

[mysqld]
server-id=51  #标识
log_bin=/var/lib/mysql/mysql_log_bin  #开启binlog并指定路径
binlog_format=mixed  #binlog 格式(mixed 兼容 row 和 statement)
log_slave_updates  #开启主从
auto_increment_increment = 2 #主键自增量
auto_increment_offset = 1 #主键起始偏量

两台虚拟机操作一样 只是主键起始偏量不同为了避免主键相同而让其错开

让51主机的主键成 1 , 3 ,5 ,7…

而52主机的主键成 2 , 4, 6, 8…

vim /etc/my.cnf
[mysqld]
server-id=52  #标识
log_bin=/var/lib/mysql/mysql_log_bin  #开启binlog并指定路径
binlog_format=mixed  #binlog 格式(mixed 兼容 row 和 statement)
log_slave_updates  #开启主从
auto_increment_increment = 2 #主键自增量
auto_increment_offset = 2 #主键起始偏量

重启mysql服务

[root@host51 ~]# systemctl restart mysqld 

2.创建授权用户

两台虚拟机操作一样

mysql -uroot -p你的密码
创建连接用户
mysql> create user 'repl'@'%' identified by '123qqq...a';
query ok, 0 rows affected (0.00 sec)
授权连接用户
mysql>  grant replication slave on *.* to 'repl'@'%';
query ok, 0 rows affected (0.00 sec)
刷新权限
mysql> flush privileges;
query ok, 0 rows affected (0.00 sec)

3.查看binlog日志信息

查看192.168.4.51

mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| file                 | position | binlog_do_db | binlog_ignore_db | executed_gtid_set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql_log_bin.000004 |     1007 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

查看192.168.4.52

mysql> show master status
    -> ;
+----------------------+----------+--------------+------------------+-------------------+
| file                 | position | binlog_do_db | binlog_ignore_db | executed_gtid_set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql_log_bin.000004 |     1007 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.配置主从

首先在51主机上配置(52为主机)

mysql> change master to
master_host='192.168.4.52', #设置主的ip地址
master_user='repl', #设置连接用户名
master_password='123qqq...a', #设置连接用户密码
master_log_file='mysql_log_bin.000004', #设置binlog文件名
master_log_pos=1007; #设置binlog 同步位置
query ok, 0 rows affected, 2 warnings (0.00 sec)

其次再在52主机上配置(51为主机)

mysql> change master to 
master_host='192.168.4.51',
master_user='repl',
master_password='123qqq...a',
master_log_file='mysql_log_bin.000004',
master_log_pos=1007;
query ok, 0 rows affected, 2 warnings (0.01 sec)

启动并查看

mysql> start slave ;
query ok, 0 rows affected (0.00 sec)

mysql> show  slave status\g ;
*************************** 1. row ***************************
               slave_io_state: waiting for master to send event
                  master_host: 192.168.4.52
                  master_user: repl
                  master_port: 3306
                connect_retry: 60
              master_log_file: mysql_log_bin.000004
          read_master_log_pos: 1007
               relay_log_file: host51-relay-bin.000003
                relay_log_pos: 324
        relay_master_log_file: mysql_log_bin.000004
             slave_io_running: yes
            slave_sql_running: yes
              replicate_do_db: 
          replicate_ignore_db: 
           replicate_do_table: 
       replicate_ignore_table: 
      replicate_wild_do_table: 
  replicate_wild_ignore_table: 
                   last_errno: 0
                   last_error: 
                 skip_counter: 0
          exec_master_log_pos: 1007
              relay_log_space: 702
              until_condition: none
               until_log_file: 
                until_log_pos: 0
           master_ssl_allowed: no
           master_ssl_ca_file: 
           master_ssl_ca_path: 
              master_ssl_cert: 
            master_ssl_cipher: 
               master_ssl_key: 
        seconds_behind_master: 0
master_ssl_verify_server_cert: no
                last_io_errno: 0
                last_io_error: 
               last_sql_errno: 0
               last_sql_error: 
  replicate_ignore_server_ids: 
             master_server_id: 52
                  master_uuid: 888f4a92-acd3-11f0-8b2a-000c29a32fbd
             master_info_file: /var/lib/mysql/master.info
                    sql_delay: 0
          sql_remaining_delay: null
      slave_sql_running_state: slave has read all relay log; waiting for more updates
           master_retry_count: 86400
                  master_bind: 
      last_io_error_timestamp: 
     last_sql_error_timestamp: 
               master_ssl_crl: 
           master_ssl_crlpath: 
           retrieved_gtid_set: 
            executed_gtid_set: 
                auto_position: 0
         replicate_rewrite_db: 
                 channel_name: 
           master_tls_version: 
1 row in set (0.00 sec)

只要slave_io_running: yes与slave_sql_running: yes都为yes即为同步成功

  • slave_io_running: yes – io 线程正常(负责拉取主库binlog)
  • slave_sql_running: yes– sql 线程正常(负责执行同步的 sql)

三、同步测试

在51主机上创建库表并插入数据

mysql> create database db1;
query ok, 1 row affected (0.00 sec)

mysql> create table db1.user(id int  primary key auto_increments);
query ok, 0 rows affected (0.01 sec)

mysql> insert into db1.user values(1);
query ok, 1 row affected (0.00 sec)

在52主机上查询是否数据同步

mysql> show databases;
+--------------------+
| database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select * from db1.user;
+------+
| id   |
+------+
|  1   |
+------+
1 row in set (0.00 sec)

然后再在52主机上创建库表并插入数据

mysql> create database db2;
query ok, 1 row affected (0.00 sec)

mysql> create table db2.user(id int  primary key auto_increments);
query ok, 0 rows affected (0.01 sec)

mysql> insert into db2.user values(2);
query ok, 1 row affected (0.00 sec)

在51主机上查询是否数据同步

mysql> show databases;
+--------------------+
| database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from db2.user;
+------+
| id   |
+------+
|  2   |
+------+
1 row in set (0.00 sec)

可看到两次数据的同步都成功了

至此互为主从配置成功数据同步成功!

总结

通过以上步骤我们完成了mysql的互为主从配置并实现数据同步。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com