关闭 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 |
    +----------+-----------+------------+----------+-------+

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

    上一篇返回首页 下一篇

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

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

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

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