文章目录
{ .ImgAlt }}

MySQL replication 是一个进程,它允许你自动从一个数据库服务器拷贝数据到另外一个或者更多的服务器。

MySQL 支持许多复制拓扑结构,其中,主从拓扑结构是最著名的。在主从拓扑结构中,一个数据库服务器扮演 master(主要服务器),其他一个或者多个数据库服务器扮演 slaves(从服务器)。默认情况下,主要数据库将数据库修改封装成二进制的形式作为事件发送出去,而从服务器在准备好的情况下,请求这些事件。

在本篇指南中,我们将会讲解在 CentOS 7 上如何建立 MySQL 主从复制,其中一个作为主服务器,一个作为从服务器。对于 MariaDB 来说,步骤是一样的。

这种类型的复制拓扑最适合部署读复制。对于线上数据库进行读复制,以便灾备和分析任务。

一、前提条件

在这个例子中,我们假设你有两台运行 CentOS 7 的服务器。它们在同一个局域网中,可以相互通信。如果你的服务器不能提供局域网 ip,你可以使用公网 IP,并且配置防火墙,允许来自可信源的流量通过 3306 端口。

这个例子中的服务器有下面的 IP:

Master IP: 192.168.121.59
Slave IP:  192.168.121.14

二、安装 MySQL

默认的 CentOS7 源没有包括 MySQL 软件包,因此我们需要从他们的官方 YUM 软件源安装 MySQL。为了避免出现问题,我们将在两台服务器上都安装 MySQL5.7。

在主从服务器上都安装 MySQL:

sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server

一旦安装完成,启动 MySQL 服务并且启用开机启动:

sudo systemctl enable mysqld
sudo systemctl start mysqld

当 MySQL 服务器第一次启动时,会给 MySQL 的 root 用户一个临时密码。想要查找这个密码,使用 grep 命令:

sudo grep 'temporary password' /var/log/mysqld.log

运行mysql_secure_installation命令设置你的新 root 密码并且提高 MySQL 实例的安全性:

mysql_secure_installation

输入临时 root 密码并且对所有的问题都回答Y(yes)。

新密码需要至少 8 位,并且包含至少一个大写字母,一个小写字母,一个数字和一个特殊符号。

三、配置主服务器

首先,我们将配置主要的 MySQL 服务器,并且做下面的修改:

  • 设置 MySQL 服务器监听局域网 IP。
  • 设置一个唯一的服务器 ID。
  • 启用二进制日志。

想要这样做,打开 MySQL 配置文件,并且讲下面的行添加到[mysqld]段:

阿里云: 爆款云服务器低至1折,1核1G 1M 仅17月/月
sudo nano /etc/my.cnf
bind-address           = 192.168.121.59
server-id              = 1
log_bin                = mysql-bin

一旦设置完成,重启 MySQL 服务,使修改生效。

sudo systemctl restart mysqld

下一步骤就是创建新的复制用户。以 root 用户登录 MySQL 服务器:

mysql -uroot -p

从 MySQL 提示内部,运行下面的 SQL 查询语句,将会创建replica用户,并且授予该用户REPLICATION SLAVE权限:

CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';
确保你修改了这个IP为你的从服务器IP地址。你可以使用你想要的名字。

当你还在 MySQL 提示符下,运行下面的命令,将会打印出二进制文件和位置:

SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 1427
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

注意文件名mysql-bin.000001和位置1427。在配置从服务器的时候,你可能要用到它们。这些值在你的服务器上可能是不同的。

四、配置从服务器

像上面的主服务器一样,我们将会对从服务器做以下修改:

  • 设置 MySQL 服务器,监听局域网 IP
  • 设置一个唯一 的服务器 ID
  • 启用二进制日志

打开 MySQL 配置文件,编辑下面的行:

sudo nano /etc/my.cnf
bind-address           = 192.168.121.14
server-id              = 2
log_bin                = mysql-bin

重启 MySQL 服务:

sudo systemctl restart mysqld

下一个步骤,是配置将要连接主服务器的从服务器参数。登录 MySQL shell:

mysql -uroot -p

首先,停止从服务器线程:

STOP SLAVE;

运行下面的查询,这将会简历从服务器复制主服务器:

CHANGE MASTER TO
MASTER_HOST='192.168.121.59',
MASTER_USER='replica',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;

确保你使用了正确的 IP 地址,用户名和密码。日志文件名和位置必须和你从主服务器上获取的值一样。

一旦完成,开启从服务器线程:

START SLAVE;

五、测试配置文件

此时,你已经设置好了主从复制。

想要验证一切按期望进行,我们将在主服务器上创建一个新的数据库:

mysql -uroot -p
CREATE DATABASE replicatest;

登录从服务器 MySQL shell:

mysql -uroot -p

运行下面的命令,列出所有的数据库:

SHOW DATABASES;

你将会看到你创建在主服务器上的数据库也在从服务器上:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| replicatest        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

六、总结

在这篇指南中,我们向你展示在 CentOS 7 上创建一个 MySQL 主从复制。




如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/how-to-configure-mysql-master-slave-replication-on-centos-7/

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议
阿里云: 爆款云服务器低至1折,1核1G 1M 仅17月/月

相关推荐