it编程 > 数据库 > Mysql

MySQL5.7.35双主搭建的实现

8人参与 2025-03-05 Mysql

上传并安装mysql 5.7.35

(172.25.0.19与172.25.0.20均部署安装并启动)

[root@qywlaq_vmc4234 ~]# hostnamectl
   static hostname: qywlaq_vmc4234
         icon name: computer-vm
           chassis: vm
        machine id: cd3605d12efd430fb723eb507cf5ce3b
           boot id: 00f929e5510944efb40d53ef55d92a49
    virtualization: kvm
  operating system: centos linux 7 (core)
       cpe os name: cpe:/o:centos:centos:7
            kernel: linux 3.10.0-1160.el7.x86_64
      architecture: x86-64

[root@qywlaq_vmc4234 ~]# ll
-rw-r--r--  1 citc unicom  26658592 12月 25 17:02 mysql-community-client-5.7.35-1.el7.x86_64.rpm
-rw-r--r--  1 citc unicom    317800 12月 25 17:03 mysql-community-common-5.7.35-1.el7.x86_64.rpm
-rw-r--r--  1 citc unicom   2473348 12月 25 17:03 mysql-community-libs-5.7.35-1.el7.x86_64.rpm
-rw-r--r--  1 citc unicom   1263816 12月 26 14:35 mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm
-rw-r--r--  1 citc unicom 182213816 12月 25 17:05 mysql-community-server-5.7.35-1.el7.x86_64.rpm

# 安装rpm包
[root@qywlaq_vmc4234 ~]# yum localinstall -y *.rpm

# 启动并设置开启自启
[root@qywlaq_vmc4234 ~]# systemctl enable --now mysqld

[root@qywlaq_vmc4234 citc]# systemctl status mysqld
● mysqld.service - mysql server
   loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   active: active (running) since 三 2025-02-26 12:24:03 cst; 4min 26s ago
     docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  process: 8441 execstart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $mysqld_opts (code=exited, status=0/success)
  process: 8374 execstartpre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/success)
 main pid: 8444 (mysqld)
    tasks: 27
   memory: 289.2m
   cgroup: /system.slice/mysqld.service
           └─8444 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

2月 26 12:23:57 qywlaq_vmc4234 systemd[1]: starting mysql server...
2月 26 12:24:03 qywlaq_vmc4234 systemd[1]: started mysql server.

# 获取初始密码
[root@qywlaq_vmc4234 citc]# sudo grep 'temporary password' /var/log/mysqld.log
2025-02-26t04:23:59.794639z 1 [note] a temporary password is generated for root@localhost: ilm3/)ya6vmh

# 登录
[root@qywlaq_vmc4234 citc]# mysql -u root -p'ilm3/)ya6vmh'
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 2
server version: 5.7.35

copyright (c) 2000, 2021, 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> alter user 'root'@'localhost' identified by '8th3xy]:na'; -- 修改root密码
query ok, 0 rows affected (0.00 sec)

mysql> flush privileges; -- 刷新权限以使修改立即生效
query ok, 0 rows affected (0.01 sec)

双主复制的配置

实例一:172.25.0.19:

# 此配置文件中追加下述配置
[root@qywlaq_vmc4234 ~]# vi /etc/my.cnf

[mysqld]
# 基本配置
server-id = 1                     # 每个实例的 server-id 必须唯一
log_bin = /var/log/mysql/mysql-bin.log  # 启用二进制日志
binlog_format = row               # 推荐使用 row 格式
expire_logs_days = 7              # 自动清理 7 天前的日志
max_binlog_size = 100m            # 每个二进制日志文件的最大大小

# 双主复制配置
log_slave_updates = 1             # 从库记录二进制日志(必须启用)
auto_increment_increment = 2      # 自增步长
auto_increment_offset = 1         # 自增起始值(实例 1 为 1,实例 2 为 2)

# 复制过滤(可选)
replicate-do-db = my_database     # 只复制指定的数据库
replicate-ignore-db = mysql       # 忽略系统库

# 其他配置
bind-address = 0.0.0.0            # 允许远程连接

重启mysql

[root@qywlaq_vmc4234 ~]# systemctl restart mysqld

实例二:172.25.0.20:

# 此配置文件中追加下述配置
[root@qywlaq_vmc1091 ~]# vi /etc/my.cnf

[mysqld]
# 基本配置
server-id = 2                     # 每个实例的 server-id 必须唯一
log_bin = /var/log/mysql/mysql-bin.log  # 启用二进制日志
binlog_format = row               # 推荐使用 row 格式
expire_logs_days = 7              # 自动清理 7 天前的日志
max_binlog_size = 100m            # 每个二进制日志文件的最大大小

# 双主复制配置
log_slave_updates = 1             # 从库记录二进制日志(必须启用)
auto_increment_increment = 2      # 自增步长
auto_increment_offset = 2         # 自增起始值(实例 1 为 1,实例 2 为 2)

# 复制过滤(可选)
replicate-do-db = my_database     # 只复制指定的数据库
replicate-ignore-db = mysql       # 忽略系统库

# 其他配置
bind-address = 0.0.0.0            # 允许远程连接

重启mysql

[root@qywlaq_vmc1091 ~]# systemctl restart mysqld

配置复制用户

在每个 mysql 实例上创建一个用于复制的用户。

在实例 1 (172.25.0.19)上执行:

mysql> create user 'replication'@'172.25.0.20' identified by '@2x0wzy/rq';
query ok, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to 'replication'@'172.25.0.20';
query ok, 0 rows affected (0.00 sec)

mysql> flush privileges;
query ok, 0 rows affected (0.01 sec)

查询用户

mysql> select user, host from mysql.user;
+---------------+-------------+
| user          | host        |
+---------------+-------------+
| replication   | 172.25.0.20 |
| mysql.session | localhost   |
| mysql.sys     | localhost   |
| root          | localhost   |
+---------------+-------------+
4 rows in set (0.00 sec)

在实例 2 (172.25.0.20)上执行:

mysql> create user 'replication'@'172.25.0.19' identified by '@2x0wzy/rq';
query ok, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'replication'@'172.25.0.19';
query ok, 0 rows affected (0.00 sec)

mysql> flush privileges;
query ok, 0 rows affected (0.00 sec)

查询用户

mysql> select user, host from mysql.user;
+---------------+-------------+
| user          | host        |
+---------------+-------------+
| replication   | 172.25.0.19 |
| mysql.session | localhost   |
| mysql.sys     | localhost   |
| root          | localhost   |
+---------------+-------------+
4 rows in set (0.00 sec)

配置主从复制

在每个实例上配置对方为主库。

查看实例 2 节点状态:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| file             | position | binlog_do_db | binlog_ignore_db | executed_gtid_set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      964 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在实例 1 上执行:

change master to
  master_host='172.25.0.20',
  master_user='replication',
  master_password='@2x0wzy/rq',
  master_log_file='mysql-bin.000002',     -- 替换为实例 2 的当前 binlog 文件
  master_log_pos=1784;                     -- 替换为实例 2 的当前 binlog 位置
start slave;

查看实例 1 节点状态:

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| file             | position | binlog_do_db | binlog_ignore_db | executed_gtid_set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      964 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在实例 2 上执行:

change master to
  master_host='172.25.0.19',
  master_user='replication',
  master_password='@2x0wzy/rq',
  master_log_file='mysql-bin.000002',     -- 替换为实例 1 的当前 binlog 文件
  master_log_pos=1784;                     -- 替换为实例 1 的当前 binlog 位置
start slave;

验证复制状态

在每个实例上执行以下命令,检查复制状态:

show slave status\g;

确保以下字段的值为 yes

测试双主复制

在 server a 上操作:

创建测试数据库和表

create database test_db;
use test_db;
create table test_table (
    id int auto_increment primary key,
    name varchar(50)
) engine=innodb;

插入数据

insert into test_table (name) values ('server a data');

在 server b 上操作:

检查数据是否同步

use test_db;
select * from test_table;

应该能看到 server a data

插入数据

insert into test_table (name) values ('server b data');

回到 server a 上操作:

检查数据是否同步

use test_db;
select * from test_table;
table (name) values (‘server a data');

在 server b 上操作:

检查数据是否同步:

use test_db;
select * from test_table;

应该能看到 server a data。

插入数据:

insert into test_table (name) values (‘server b data');

回到 server a 上操作:

检查数据是否同步:

use test_db;
select * from test_table;

应该能看到 server b data。

到此这篇关于mysql5.7.35双主搭建的实现的文章就介绍到这了,更多相关mysql双主搭建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

MySQL DATE_SUB()函数的实现示例

03-05

MySQL高可用与扩展方式

03-05

MySQL逻辑备份的实现步骤

03-05

Nginx中location实现多条件匹配的方法详解

03-05

MySQL修改密码的四种方式详解

03-06

MySQL中如何开启二进制日志(Binlog)

03-06

猜你喜欢

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

发表评论