关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »如何在 CentOS Linux 中配置 MariaDB 复制

    如何在 CentOS Linux 中配置 MariaDB 复制

    2015-05-23 00:00:00 出处:老男孩oldboy 的BLOG
    分享

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

    Mariadb 复制概念

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

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

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

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

    如何在 CentOS Linux 中配置 MariaDB 复制

    复制的简单图解示范

    如何在 CentOS Linux 中配置 MariaDB 复制

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

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

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

    主服务器配置

    首先升级服务器

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

    我们工作在centos7 服务器上

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

    安装 MariaDB

    sudo yum install mariadb-server -y

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

    sudo systemctl start mariadb.service
    sudo systemctl enable mariadb.service

    输出如下:

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

    检查 MariaDB 状态

    sudo service mariadb status

    或者使用

    sudo systemctl is-active mariadb.service

    输出如下:

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

    设置 MariaDB 密码

    mysql -u root
    mysql> use mysql;
    mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> exit

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

    sudo mysql -u root -pSOME_ROOT_PASSWORD

    输出如下:

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

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

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

    创建数据库/模式

    sudo mysql -u root -pSOME_ROOT_PASSWORD
    mysql> create database test_repl;

    其中:

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

    输出:如下

    Query OK, 1 row affected (0.00 sec)

    创建 Persons 表

    mysql> use test_repl;
    
    CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    );

    输出如下:

    mysql> MariaDB [test_repl]> CREATE TABLE Persons (
    -> PersonID int,
    -> LastName varchar(255),
    -> FirstName varchar(255),
    -> Address varchar(255),
    -> City varchar(255)
    -> );
    Query OK, 0 rows affected (0.01 sec)

    插入一些数据

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

    输出如下:

    Query OK, 5 row affected (0.00 sec)

    检查数据

    mysql> select * from Persons;

    输出如下:

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

    配置 MariaDB 复制

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

    sudo vi /etc/my.cnf

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

    log-basename=master
    log-bin
    binlog-format=row
    server_id=1

    输出如下:

    然后重启 MariaDB:

    sudo service mariadb restart

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

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

    输出如下:

    +--------------------+----------+--------------+------------------+
    | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +--------------------+----------+--------------+------------------+
    | mariadb-bin.000002 |     3913 |              |                  |
    +--------------------+----------+--------------+------------------+

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

    创建用来复制的用户

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

    输出如下:

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

    在数据库中检查用户

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

    输出如下:

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

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

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

    其中:

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

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

    从节点配置

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

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

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

    mysql -u root -pSOME_ROOT_PASSWORD;
    mysql> create database test_repl;
    mysql> exit;

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

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

    其中:

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

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

    mysql> CHANGE MASTER TO
    MASTER_HOST='82.196.5.39',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='bigs3cret',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='mariadb-bin.000002',
    MASTER_LOG_POS=3913,
    MASTER_CONNECT_RETRY=10;

    其中:

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

    开启从节点模式

    mysql> slave start;

    输出如下:

    Query OK, 0 rows affected (0.00 sec)

    检查从节点状态

    mysql> show slave statusG;

    输出如下:

    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 82.196.5.39
    Master_User: replication_user
    Master_Port: 3306
    Connect_Retry: 10
    Master_Log_File: mariadb-bin.000002
    Read_Master_Log_Pos: 4175
    Relay_Log_File: mariadb-relay-bin.000002
    Relay_Log_Pos: 793
    Relay_Master_Log_File: mariadb-bin.000002
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Replicate_Do_DB:
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 4175
    Relay_Log_Space: 1089
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Master_SSL_CA_File:
    Master_SSL_CA_Path:
    Master_SSL_Cert:
    Master_SSL_Cipher:
    Master_SSL_Key:
    Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 0
    Last_SQL_Error:
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 1
    1 row in set (0.00 sec)

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

    测试复制

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

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

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

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

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

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。