如何在 CentOS/RHEL 7 和 Debian 8/9 中设置 MariaDB(主从)复制
即使一些 IT 人员听到“数据库复制”这个短语,他们也经常将其与需要拥有相同信息的多个副本以避免在硬件故障或数据损坏时丢失数据联系在一起。虽然在某种程度上确实如此,但数据库复制的含义远不止备份数据库和数据可用性的常见概念。
在主从设置中数据库复制的其他好处中,我们可以提到:
- 备份可以在从服务器上完成,而不会影响主服务器中的写入操作(也不会受到其影响)。
- 可以在Slave上执行资源密集型操作(例如数据分析),而不影响Master的性能。
在本文中,我们将解释如何在 MariaDB 10.1 中设置主从复制。与经典复制相反,MariaDB 在 v10.0 中引入了全局事务 ID (GTID) 的概念,它允许将从属更改为轻松连接到不同的主机并从不同的主机进行复制。最重要的是,从机的状态以崩溃安全的方式记录(状态更新与数据更新在同一事务中完成)。
如果您正在寻找 CentOS/RHEL 6 下的 MySQL 复制,请按照本指南在 CentOS/RHEL 6 上设置 MySQL(主从)复制
在 CentOS/RHEL 7 和 Debian 8/9 中安装 MariaDB 10.1
我们的测试环境由以下机器组成(均为CentOS 7):
Master: 192.168.0.18
Slave: 192.168.0.19
要安装最新版本的 MariaDB,我们需要将其存储库添加到我们的服务器。如果您使用旧版本的 MariaDB(例如 5.5),请考虑使用下面的文章升级到最新的 10.1 版本。
- 将 MariaDB 5.5 升级到 MariaDB 10.1
在 CentOS/RHEL 中
在 /etc/yum.repos.d 中创建一个名为 MariaDB.repo
的文件,并在 Master 和 Slave 上包含以下内容 系统:
MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
保存文件并使用 yum 在两台服务器上安装 MariaDB:
yum update && yum install MariaDB-server MariaDB-client
在 Debian/Ubuntu 中
添加密钥以验证包和 MariaDB 存储库:
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
注意:替换上面突出显示的行中的发行版名称和代号。
使用 apt-get 命令安装:
apt-get update
apt-get install mariadb-server
安装 MariaDB 后,在主设备和从设备上运行 mysql_secure_installation 过程,让我们在主设备中设置一个示例测试数据库。
在 Master 上设置示例 MySQL 数据库
我们现在将在主服务器中设置来自 https://github.com/datacharmer/test_db 的 Employees
数据库(它提供了 4 的数据集)强> 百万条记录分布在六个表中),只需两个简单的步骤:
克隆存储库并使用它将示例数据库导入到您的 MariaDB 安装中:
git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql
在Master上配置MySQL服务器
要配置主站,请执行以下步骤:
第 1 步:编辑 /etc/my.cnf
文件。在 [mysqld]
部分下,添加以下四行:
log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18
并重新启动 MariaDB:
systemctl restart mariadb
第 2 步:以 root 身份登录 MariaDB 服务器,创建用户 Slave 并分配必要的权限:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;
last 命令 (SHOW MASTER STATUS) 返回二进制日志中的当前位置(准确指示从属设备应从哪个点开始复制的精确坐标:
第 3 步:退出 MariaDB 提示符(使用 exit;
)并使用以下命令拍摄员工数据库的快照。当您按Enter键时,系统将提示您输入之前通过mysql_secure_installation
设置的root密码:
mysqldump -u root -p employees > employees-dump.sql
转储完成后,再次连接数据库服务器以解锁表,然后退出:
MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;
第 4 步:将转储复制到从属服务器:
scp employees-dump.sql [email :/root/
第 5 步:运行 mysql_upgrade
过程来升级系统表(系统将提示您输入 MariaDB root 密码):
mysql_upgrade -u root -p
第6步:允许数据库服务通过防火墙:
firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload
现在让我们配置从站。
在 Slave 上配置 MySQL 服务器
要配置从站,请执行以下步骤:
第 1 步:创建帐户来执行复制任务。使用以下命令连接到本地 MariaDB 服务器:
mysql -u root –p
并输入您之前设置的密码。
第 2 步:连接到数据库服务器后,创建用户和空数据库,并授予权限:
MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
第 3 步:退出 MariaDB 提示符并加载在主服务器中创建的转储:
mysql -u root -p employees < employees-dump.sql
第4步:编辑/etc/my.cnf
文件,为[mysqld]<下的从站分配服务器ID /代码> 部分。请注意,它需要是与 1 不同的整数,因为我们在母版中使用了 1:
server_id=2
replicate-do-db=employees
重新启动数据库服务器:
systemctl restart mariadb
第 5 步:运行 mysql_upgrade
过程来升级系统表(系统将提示您输入 MariaDB root 密码):
mysql_upgrade -u root -p
第 6 步:将转储导入从属服务器后,我们只需执行几个步骤即可开始复制。登录到数据库并在 MariaDB 提示符下运行以下命令。特别注意 MASTER_LOG_FILE
和 MASTER_LOG_POS
变量,它们应与“配置主站”第 2 步中 SHOW MASTER STATUS 返回的值匹配多于。
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.0.18',
MASTER_USER='slave',
MASTER_PASSWORD='SlavePassword',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=314,
MASTER_CONNECT_RETRY=10,
MASTER_USE_GTID=current_pos;
第 7 步:启动从属服务器并检查其状态,而无需退出 MariaDB 提示符:
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
并不是说您现在需要这个,但请注意您可以通过以下方式停止从站:
MariaDB [(none)]> STOP SLAVE;
如果 SHOW SLAVE STATUS\G;
命令返回任何错误。使用这些错误进行故障排除,然后运行 START SLAVE;
再次测试。
测试 MySQL/MariaDB 数据库复制
让我们向主服务器的 employees 表添加一条记录:
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
然后验证此更改是否已复制到从属服务器中:
MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
正如您所看到的,从主服务器到从服务器的复制工作正常。
概括
在本文中,我们解释了如何在 CentOS/RHEL 7 和 Debian 8/9 中安装最新版本的 MariaDB,并讨论了如何使用 GTID 设置主从复制。有关更多信息,您可能需要参阅 MariaDB 复制指南,如果您有疑问或意见,请随时使用下面的表格与我们联系。