如何在 CentOS Linux 中配置 MariaDB 复制

如何在 CentOS Linux 中配置 MariaDB 复制

这是一个创建数据库重复版本的过程。复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步。但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构、行或者列,这叫做局部复制。复制保证了特定的配置对象在不同的数据库之间保持一致。

Mariadb 复制概念

备份 :复制可以用来进行数据库备份。例如,当你做了主->从复制。如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库。

扩展 :你可以使用主->从复制作为扩展解决方案。例如,如果你有一些大的数据库以及SQL查询,使用复制你可以将这些查询分离到每个复制节点。写入操作的SQL应该只在主节点进行,而只读查询可以在从节点上进行。

分发解决方案 :你可以用复制来进行分发。例如,你可以将不同的销售数据分发到不同的数据库。

故障解决方案 : 假如你建立有主节点->从节点1->从节点2->从节点3的复制结构。你可以为主节点写脚本监控,如果主节点出故障了,脚本可以快速的将从节点1切换为新的主节点,这样复制结构变成了主节点->从节点1->从节点2,你的应用可以继续工作而不会停机。

复制的简单图解示范

mysql 复制原理

开始之前,你应该知道什么是二进制日志文件以及 Ibdata1。

二进制日志文件中包括关于数据库,数据和结构的所有更改的记录,以及每条语句的执行了多长时间。二进制日志文件包括一系列日志文件和一个索引文件。这意味着主要的SQL语句,例如CREATE, ALTER, INSERT, UPDATE 和 DELETE 会放到这个日志文件中;而例如SELECT这样的语句就不会被记录,它们可以被记录到普通的query.log文件中。

而 Ibdata1 简单的说据是一个包括所有表和所有数据库信息的文件。

主服务器配置

首先升级服务器


  1. sudo yum install update -y && sudo yum install upgrade -y

我们工作在centos7 服务器上


  1. sudo cat /etc/redhat-release
  2. CentOS Linux release 7.0.1406 (Core)

安装 MariaDB


  1. sudo yum install mariadb-server -y

启动 MariaDB 并启用随服务器启动


  1. sudo systemctl start mariadb.service
  2. sudo systemctl enable mariadb.service

输出如下:


  1. ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

检查 MariaDB 状态


  1. sudo service mariadb status

或者使用


  1. sudo systemctl is-active mariadb.service

输出如下:


  1. Redirecting to /bin/systemctl status mariadb.service
  2. mariadb.service - MariaDB database server
  3. Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

设置 MariaDB 密码


  1. mysql -u root
  2. mysql> use mysql;
  3. mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
  4. mysql> flush privileges;
  5. mysql> exit

这里 SOME_ROOT_PASSWORD 是你的 root 密码。 例如我用"q"作为密码,然后尝试登录:


  1. sudo mysql -u root -pSOME_ROOT_PASSWORD

输出如下:


  1. Welcome to the MariaDB monitor. Commands end with ; or \g.
  2. Your MariaDB connection id is 5
  3. Server version: 5.5.41-MariaDB MariaDB Server
  4. Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

输入 'help;' 或 '\h' 查看帮助信息。 输入 '\c' 清空当前输入语句。

让我们创建包括一些数据的表的数据库

创建数据库/模式


  1. sudo mysql -u root -pSOME_ROOT_PASSWORD
  2. mysql> create database test_repl;

其中:


  1. test_repl - 将要被复制的模式的名字

输出:如下


  1. Query OK, 1 row affected (0.00 sec)

创建 Persons 表


  1. mysql> use test_repl;
  2. CREATE TABLE Persons (
  3. PersonID int,
  4. LastName varchar(255),
  5. FirstName varchar(255),
  6. Address varchar(255),
  7. City varchar(255)
  8. );

输出如下:


  1. mysql> MariaDB [test_repl]> CREATE TABLE Persons (
  2. -> PersonID int,
  3. -> LastName varchar(255),
  4. -> FirstName varchar(255),
  5. -> Address varchar(255),
  6. -> City varchar(255)
  7. -> );
  8. Query OK, 0 rows affected (0.01 sec)

插入一些数据


  1. mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
  2. mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
  3. mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
  4. mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
  5. mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

输出如下:


  1. Query OK, 5 row affected (0.00 sec)

检查数据


  1. mysql> select * from Persons;

输出如下:


  1. +----------+-----------+------------+----------+-------+
  2. | PersonID | LastName | FirstName | Address | City |
  3. +----------+-----------+------------+----------+-------+
  4. | 1 | LastName1 | FirstName1 | Address1 | City1 |
  5. | 1 | LastName1 | FirstName1 | Address1 | City1 |
  6. | 2 | LastName2 | FirstName2 | Address2 | City2 |
  7. | 3 | LastName3 | FirstName3 | Address3 | City3 |
  8. | 4 | LastName4 | FirstName4 | Address4 | City4 |
  9. | 5 | LastName5 | FirstName5 | Address5 | City5 |
  10. +----------+-----------+------------+----------+-------+

配置 MariaDB 复制

你需要在主节点服务器上编辑 my.cnf文件来启用二进制日志以及设置服务器id。我会使用vi文本编辑器,但你可以使用任何你喜欢的,例如nano,joe。


  1. sudo vi /etc/my.cnf

将下面的一些行写到[mysqld]部分。


  1. log-basename=master
  2. log-bin
  3. binlog-format=row
  4. server_id=1

输出如下:

mariadb 配置主节点

然后重启 MariaDB:


  1. sudo service mariadb restart

登录到 MariaDB 并查看二进制日志文件:


  1. sudo mysql -u root -pq test_repl
  2. mysql> SHOW MASTER STATUS;

输出如下:


  1. +--------------------+----------+--------------+------------------+
  2. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  3. +--------------------+----------+--------------+------------------+
  4. | mariadb-bin.000002 | 3913 | | |
  5. +--------------------+----------+--------------+------------------+

记住 : "File" 和 "Position" 的值。在从节点中你需要使用这些值

创建用来复制的用户


  1. mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
  2. mysql> flush privileges;

输出如下:


  1. Query OK, 0 rows affected (0.00 sec)
  2. Query OK, 0 rows affected (0.00 sec)

在数据库中检查用户


  1. mysql> select * from mysql.user WHERE user="replication_user"\G;

输出如下:


  1. mysql> select * from mysql.user WHERE user="replication_user"\G;
  2. *************************** 1. row ***************************
  3. Host: %
  4. User: replication_user
  5. Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
  6. Select_priv: N
  7. .....

从主节点创建 DB dump (将要被复制的所有数据的快照)


  1. mysqldump -uroot -pSOME_ROOT_PASSWORD test_repl > full-dump.sql

其中:


  1. SOME_ROOT_PASSWORD - 你设置的root用户的密码
  2. test_repl - 将要复制的数据库的名称;

你需要在从节点中恢复 mysql dump (full-dump.sql)。重复需要这个。

从节点配置

所有这些命令需要在从节点中进行。

假设我们已经更新/升级了包括有最新的MariaDB服务器的 CentOS 7.x,而且你可以用root账号登陆到MariaDB服务器(这在这篇文章的第一部分已经介绍过)

登录到Maria 数据库控制台并创建数据库


  1. mysql -u root -pSOME_ROOT_PASSWORD;
  2. mysql> create database test_repl;
  3. mysql> exit;

在从节点恢复主节点的数据


  1. mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

其中:

full-dump.sql - 你在测试服务器中创建的DB Dump。

登录到Maria 数据库并启用复制


  1. mysql> CHANGE MASTER TO
  2. MASTER_HOST='82.196.5.39',
  3. MASTER_USER='replication_user',
  4. MASTER_PASSWORD='bigs3cret',
  5. MASTER_PORT=3306,
  6. MASTER_LOG_FILE='mariadb-bin.000002',
  7. MASTER_LOG_POS=3913,
  8. MASTER_CONNECT_RETRY=10;

mariadb 启用复制

其中:


  1. MASTER_HOST - 主节点服务器的IP
  2. MASTER_USER - 主节点服务器中的复制用户
  3. MASTER_PASSWORD - 复制用户密码
  4. MASTER_PORT - 主节点中的mysql端口
  5. MASTER_LOG_FILE - 主节点中的二进制日志文件名称
  6. MASTER_LOG_POS - 主节点中的二进制日志文件位置

开启从节点模式


  1. mysql> slave start;

输出如下:


  1. Query OK, 0 rows affected (0.00 sec)

检查从节点状态


  1. mysql> show slave status\G;

输出如下:


  1. *************************** 1. row ***************************
  2. Slave_IO_State: Waiting for master to send event
  3. Master_Host: 82.196.5.39
  4. Master_User: replication_user
  5. Master_Port: 3306
  6. Connect_Retry: 10
  7. Master_Log_File: mariadb-bin.000002
  8. Read_Master_Log_Pos: 4175
  9. Relay_Log_File: mariadb-relay-bin.000002
  10. Relay_Log_Pos: 793
  11. Relay_Master_Log_File: mariadb-bin.000002
  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: 4175
  24. Relay_Log_Space: 1089
  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. Replicate_Ignore_Server_Ids:
  41. Master_Server_Id: 1
  42. 1 row in set (0.00 sec)

到这里所有步骤都应该没问题,也不应该出现错误。

测试复制

在主节点服务器中添加一些条目到数据库


  1. mysql -u root -pSOME_ROOT_PASSWORD test_repl
  2. mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
  3. mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
  4. mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

到从节点服务器中查看复制数据


  1. mysql -u root -pSOME_ROOT_PASSWORD test_repl
  2. mysql> select * from Persons;
  3. +----------+-----------+------------+----------+-------+
  4. | PersonID | LastName | FirstName | Address | City |
  5. +----------+-----------+------------+----------+-------+
  6. ...................
  7. | 6 | LastName6 | FirstName6 | Address6 | City6 |
  8. | 7 | LastName7 | FirstName7 | Address7 | City7 |
  9. | 8 | LastName8 | FirstName8 | Address8 | City8 |
  10. +----------+-----------+------------+----------+-------+

你可以看到数据已经被复制到从节点。这意味着复制能正常工作。希望你能喜欢这篇文章。如果你有任何问题请告诉我们。

原文发布时间:2015-05-22

本文来自云栖合作伙伴“linux中国”

时间: 2024-10-18 06:19:51

如何在 CentOS Linux 中配置 MariaDB 复制的相关文章

完全指南:如何在CentOS 7中安装、配置和安全加固FTP服务

FTP(文件传输协议)是一种用于通过网络在服务器和客户端之间传输文件的传统并广泛使用的标准工具,特别是在不需要身份验证的情况下(允许匿名用户连接到服务器).我们必须明白,默认情况下 FTP 是不安全的,因为它不加密传输用户凭据和数据. 在本指南中,我们将介绍在 CentOS/RHEL7 和 Fedora 发行版中安装.配置和保护 FTP 服务器( VSFTPD 代表 "Very Secure FTP Daemon")的步骤. 请注意,本指南中的所有命令将以 root 身份运行,如果你不

如何在 Ubuntu 服务器中配置 AWStats

如何在 Ubuntu 服务器中配置 AWStats AWStats 是一个开源的网站分析报告工具,可以生成强大的网站.流媒体.FTP 或邮件服务器的访问统计图.此日志分析器以 CGI 或命令行方式进行工作,并在网页中以图表的形式尽可能的显示你日志中所有的信息.它可以"部分"读取信息文件,以便能够频繁并快速处理大量的日志文件.它支持绝大多数 Web 服务器日志文件格式,包括 Apache,IIS 等. 本文将帮助你在 Ubuntu 上安装配置 AWStats. 安装 AWStats 包

RHEL/CentOS 7 中配置 PXE 网络启动服务器

RHEL/CentOS 7 中配置 PXE 网络启动服务器 PXE服务器--预启动执行环境--指示客户端计算机直接从网络接口启动.运行或安装操作系统,而不需要烧录CD/DVD或使用某个物理介质,它可以减轻你网络中多台机器同时安装Linux发行版的工作. 在RHEL/CentOS 7中设置PXE网络启动 前置阅读 CentOS 7最小化安装步骤 RHEL 7最小化安装步骤 在RHEL/CentOS 7中配置静态IP地址 移除RHEL/CentOS 7中不要的服务 安装NTP服务器以设置RHEL/C

如何在CentOS/RHEL中安装基于Web的监控系统 linux-dash

如何在CentOS/RHEL中安装基于Web的监控系统 linux-dash Linux-dash是一款为Linux设计的基于web的轻量级监控面板.这个程序会实时显示各种不同的系统属性,比如CPU负载.RAM使用率.磁盘使用率.网速.网络连接.RX/TX带宽.登录用户.运行的进程等等.它不会存储长期的统计.因为它没有后端数据库. 本篇文章将会向你展示如何安装和设置Linux dash,这里所使用的web服务器是Nginx. 安装 首先我们要启用EPEL 仓库. 接下来,我们需要用下面的命令安装

如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址

如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址 今天我们来学习一下如何在CentOS 7 Linux分布式系统中为Tomcat绑定IPv4. Apache Tomcat 是由Apache 软件基金会 开发的开源web服务器和servlet容器.它实现了Java Servlet,JavaServer页面(JSP),Java的统一表达式语言,以及Sun Microsystems的Java的WebSocket规范,并提供了一个运行java代码的web服务器环境.

如何在 CentOS 7 中添加新磁盘而不用重启系统

如何在 CentOS 7 中添加新磁盘而不用重启系统 对大多数系统管理员来说扩充 Linux 服务器的磁盘空间是日常的工作之一.因此这篇文章会通过使用 Linux 命令,在 CentOS 7 系统上演示一些简单的操作步骤来扩充您的磁盘空间而不需要重启您的生产服务器.关于扩充和增加新的磁盘到 Linux 系统,我们会提及多种方法和多种可行性,可按您所需选择最适用的一种. 1. 在虚拟机客户端扩充磁盘空间: 在为 Linux 系统增加磁盘卷之前,您首先需要添加一块新的物理磁盘,或在 VMware v

如何在CentOS 7中禁止IPv6

如何在CentOS 7中禁止IPv6 最近,我的一位朋友问我该如何禁止IPv6.在搜索了一番之后,我找到了下面的方案.下面就是在我的CentOS 7 迷你服务器禁止IPv6的方法. 你可以用两个方法做到这个. 方法 1 编辑文件/etc/sysctl.conf, vi /etc/sysctl.conf 添加下面的行: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 如果你想要为特定的网卡禁止IPv

浅析如何在tnsnames.ora中配置监听

以下是对如何在tnsnames.ora中配置监听进行了详细的分析介绍,需要的朋友可以过来参考下   tnsnames.ora所在位置:D:Installedoracleproduct11.1.0db_1NETWORKADMINtnsnames.ora也就是说在product中 只有配置了监听之后才可以登录到数据库中 复制代码 代码如下: TOTO =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 这里是IP地址)(PORT = 1

linux 中配置apache 网站 编码设置为gb2312 浏览乱码

问题描述 linux 中配置apache 网站 编码设置为gb2312 浏览乱码 httpd.conf 添加了 AddDefaultCharset GB2312? 网页添加了 浏览器浏览的时候默认编码格式还是utf-8 显示乱码 解决方案 将环境变量LANG设置LANG="zh_CN GBK"