CentOS 6.4系统MySQL主从复制基本配置实践

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

对于MySQL数据库一般用途的主从复制,可以实现数据的备份(如果希望在主节点失效后,能够使从节点自动接管,就需要更加复杂的配置,这里暂时先不考虑),如果主节点出现硬件故障,数据库服务器可以直接手动切换成备份节点(从节点),继续提供服务。基本的主从复制配置起来非常容易,这里我们做个简单的记录总结。
我们选择两台服务器来进行MySQL的主从复制实践,一台m1作为主节点,另一台nn作为从节点。
两台机器上都需要安装MySQL数据库,如果想要卸掉默认安装的,可以执行如下命令:

1 sudo rpm -e --nodeps mysql
2 yum list | grep mysql

现在可以在CentOS 6.4上直接执行如下命令进行安装:

1 sudo yum install -y mysql-server mysql mysql-deve

为root用户设置密码:

1 mysqladmin -u root password 'shiyanjun'

然后可以直接通过MySQL客户端登录:

1 mysql -u root -p

主节点配置

首先,考虑到数据库的安全,以及便于管理,我们需要在主节点m1上增加一个专用的复制用户,使得任意想要从主节点进行复制从节点都必须使用这个账号:

1 CREATE USER repli_user;
2 GRANT REPLICATION SLAVE ON *.* TO 'repli_user'@'%' IDENTIFIED BY 'shiyanjun';

这里还进行了操作授权,使用这个换用账号来执行集群复制。如果想要限制IP端段,也可以在这里进行配置授权。
然后,在主节点m1上,修改MySQL配置文件/etc/my.cnf,使其支持Master复制功能,修改后的内容如下所示:

01 [mysqld]
02 datadir=/var/lib/mysql
03 socket=/var/lib/mysql/mysql.sock
04 user=mysql
05 # Disabling symbolic-links is recommended to prevent assorted security risks
06 symbolic-links=0
07 server-id=1
08 log-bin=m-bin
09 log-bin-index=m-bin.index
10
11 [mysqld_safe]
12 log-error=/var/log/mysqld.log
13 pid-file=/var/run/mysqld/mysqld.pid

server-id指明主节点的身份,从节点通过这个server-id来识别该节点是Master节点(复制架构中的源数据库服务器节点)。
如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器:

1 sudo service mysqld restart

从节点配置

接着,类似地进行从节点nn的配置,同样修改MySQL配置文件/etc/my.cnf,使其支持Slave端复制功能,修改后的内容如下所示:

01 [mysqld]
02 datadir=/var/lib/mysql
03 socket=/var/lib/mysql/mysql.sock
04 user=mysql
05 # Disabling symbolic-links is recommended to prevent assorted security risks
06 symbolic-links=0
07 server-id=2
08 relay-log=slave-relay-bin
09 relay-log-index=slave-relay-bin.index
10
11 [mysqld_safe]
12 log-error=/var/log/mysqld.log
13 pid-file=/var/run/mysqld/mysqld.pid

同样,如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器:

1 sudo service mysqld restart

然后,需要使从节点nn指向主节点,并启动Slave复制,执行如下命令:

1 CHANGE MASTER TO MASTER_HOST='m1', MASTER_PORT=3306, MASTER_USER='repli_user', MASTER_PASSWORD='shiyanjun';
2 START SLAVE;

验证集群复制

这时,可以在主节点m1上执行相关操作,验证从节点nn同步复制了主节点的数据库中的内容变更。
如果此时,我们已经配置好了主从复制,那么对于主节点m1上MysQL数据库的任何变更都会复制到从节点nn上,包括建库建表、插入更新等操作,下面我们从建库开始:
在主节点m1上建库建表:

01 CREATE DATABASE workflow;
02 CREATE TABLE `workflow`.`project` (
03 `id` int(11) NOT NULL AUTO_INCREMENT,
04 `name` varchar(100) NOT NULL,
05 `type` tinyint(4) NOT NULL DEFAULT '0',
06 `description` varchar(500) DEFAULT NULL,
07 `create_at` date DEFAULT NULL,
08 `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP,
09 `status` tinyint(4) NOT NULL DEFAULT '0',
10 PRIMARY KEY (`id`)
11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在m1上查看binlog内容,执行命令:

1 SHOW BINLOG EVENTS\G

binlog内容内容如下所示:

01 *************************** 1. row ***************************
02 Log_name: m-bin.000001
03 Pos: 4
04 Event_type: Format_desc
05 Server_id: 1
06 End_log_pos: 106
07 Info: Server ver: 5.1.73-log, Binlog ver: 4
08 *************************** 2. row ***************************
09 Log_name: m-bin.000001
10 Pos: 106
11 Event_type: Query
12 Server_id: 1
13 End_log_pos: 197
14 Info: CREATE DATABASE workflow
15 *************************** 3. row ***************************
16 Log_name: m-bin.000001
17 Pos: 197
18 Event_type: Query
19 Server_id: 1
20 End_log_pos: 671
21 Info: CREATE TABLE `workflow`.`project` (
22 `id` int(11) NOT NULL AUTO_INCREMENT,
23 `name` varchar(100) NOT NULL,
24 `type` tinyint(4) NOT NULL DEFAULT '0',
25 `description` varchar(500) DEFAULT NULL,
26 `create_at` date DEFAULT NULL,
27 `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
28 `status` tinyint(4) NOT NULL DEFAULT '0',
29 PRIMARY KEY (`id`)
30 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
31 3 rows in set (0.00 sec)

通过上述binlog内容,我们大概可以看到MySQL的binlog都记录那些信息,一个事件对应一行记录。这些记录信息的组织结构如下所示:

  • Log_name:日志名称,指定的记录操作的binlog日志名称,这里是m-bin.000001,与我们前面在/etc/my.cnf中配置的相对应
  • Pos:记录事件的起始位置
  • Event_type:事件类型
  • End_log_pos:记录事件的结束位置
  • Server_id:服务器标识
  • Info:事件描述信息

然后,我们可以查看在从节点nn上复制的情况。通过如下命令查看从节点nn上数据库和表的信息:

1 SHOW DATABASES;
2 USE workflow;
3 SHOW TABLES;
4 DESC project;

我们再看一下执行插入语句的情况。在主节点m1上执行如下SQL语句:

1 INSERT INTO `workflow`.`project` VALUES(1, 'Avatar-II', 1, 'Avatar-II project', '2014-02-16', '2014-02-16 11:09:54', 0);

可以在从节点上执行查询,看到从节点nn上复制了主节点m1上执行的INSERT语句的记录:

1 SELECT * FROM workflow.project;

验证复制成功。

复制常用命令

下面,我们总结了几个在MySQL主从复制场景中常用到的几个相关命令:

  • 终止主节点复制
1 STOP MASTER;
  • 清除主节点复制文件
1 RESET MASTER;
  • 终止从节点复制
1 STOP SLAVE;
  • 清除从节点复制文件
1 RESET SLAVE;
  • 查看主节点复制状态
1 SHOW MASTER STATUS\G;

结果示例:

1 *************************** 1. row ***************************
2 File: m-bin.000001
3 Position: 956
4 Binlog_Do_DB:
5 Binlog_Ignore_DB:
6 1 row in set (0.00 sec)
  • 查看从节点复制状态
1 SHOW SLAVE STATUS\G;

结果示例:

01 *************************** 1. row ***************************
02 Slave_IO_State: Waiting for master to send event
03 Master_Host: m1
04 Master_User: repli_user
05 Master_Port: 3306
06 Connect_Retry: 60
07 Master_Log_File: m-bin.000001
08 Read_Master_Log_Pos: 956
09 Relay_Log_File: slave-relay-bin.000002
10 Relay_Log_Pos: 1097
11 Relay_Master_Log_File: m-bin.000001
12 Slave_IO_Running: Yes
13 Slave_SQL_Running: Yes
14 Replicate_Do_DB:
15 Replicate_Ignore_DB:
16 Replicate_Do_Table:
17 Replicate_Ignore_Table:
18 Replicate_Wild_Do_Table:
19 Replicate_Wild_Ignore_Table:
20 Last_Errno: 0
21 Last_Error:
22 Skip_Counter: 0
23 Exec_Master_Log_Pos: 956
24 Relay_Log_Space: 1252
25 Until_Condition: None
26 Until_Log_File:
27 Until_Log_Pos: 0
28 Master_SSL_Allowed: No
29 Master_SSL_CA_File:
30 Master_SSL_CA_Path:
31 Master_SSL_Cert:
32 Master_SSL_Cipher:
33 Master_SSL_Key:
34 Seconds_Behind_Master: 0
35 Master_SSL_Verify_Server_Cert: No
36 Last_IO_Errno: 0
37 Last_IO_Error:
38 Last_SQL_Errno: 0
39 Last_SQL_Error:
40 1 row in set (0.00 sec)
  • 查看BINLOG列表
1 SHOW BINARY LOGS\G
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
66 5
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
60 2
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
151 3
|
2月前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
56 1
|
1月前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
30 0
|
3月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
133 9
|
2月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
147 3
|
2月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
197 2