Mariadb数据库主从复制同步配置过程实例

 更新时间:2022年11月24日 11:24:21   作者:江湖有缘  
这篇文章主要为大家介绍了Mariadb数据库主从复制同步配置过程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、环境规划

hostnameIP地址系统版本角色
master192.168.3.171centos 7.6主节点
node01192.168.3.172centos 7.6从节点
node02192.168.3.173centos 7.6从节点

二、Mariadb的主从复制介绍

1.主从复制简介

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。

2.半同步复制介绍

半同步复制是解决主库数据挂掉,从库数据不一致的问题。 解决方法:半同步复制,半同步复制场景中,master会监视所有的slave,确保其中至少一台数据完全同步成功,master才会返回客户端信息,此数据写成功。

3.主从复制原理图

三、安装Mariadb

1.配置yum仓库

3个节点都安装Mariadb数据库

[root@master yum.repos.d]# cat mariadb.repo 
# MariaDB 10.6 CentOS repository list - created 2021-12-27 11:21 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.6/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=0
 sed -i 's#//mirrors.xtom.com.hk#//mirrors.ustc.edu.cn#g' /etc/yum.repos.d/mariadb.repo

2.检查yum仓库

[root@master yum.repos.d]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                                              repo name                                                             status
mariadb                                                              MariaDB                                                               enabled: 96
repolist: 96

3.安装mariadb

yum -y install mariadb-server

4.启动mariadb服务

[root@master yum.repos.d]# systemctl start mariadb
[root@master yum.repos.d]# systemctl enable  mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@master yum.repos.d]# 

5.从节点安装mariadb

如上步骤安装即可。

四、mariadb主库配置

1.mariadb的初始化

[root@master ~]# mariadb-secure-installation 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
 ... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] n
 ... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
 ... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
[root@master ~]# 

2.修改主库配置文件

[root@master ~]# grep -Ev "^$|^#" /etc/my.cnf.d/server.cnf
[server]
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
server_id = 12    #  一组主从组里的每个id必须是唯一值。推荐用ip位数
log-bin= mysql-bin # 二进制日志,后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1 # 不区分大小写
binlog-format=ROW    # 二进制日志文件格式
log-slave-updates=True    # slave更新是否记入日志
sync-master-info=1    # 值为1确保信息不会丢失
slave-parallel-threads=3 #同时启动多少个复制线程,最多与要复制的数据库数量相等即可
binlog-checksum=CRC32    # 效验码
master-verify-checksum=1    # 启动主服务器效验
slave-sql-verify-checksum=1   # 启动从服务器效验
[galera]
[embedded]
[mariadb]
[mariadb-10.6]
[root@master ~]# 

3.重启mariadb服务

[root@master ~]# systemctl restart mariadb
[root@master ~]# 

五、mariadb从库配置

1.修改从库node01节点的server.cnf文件

[root@node01 ~]# cat  /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
server_id=15
#log-bin= mysql-bin #log-bin是二进制文件
relay_log = relay-bin    # 中继日志, 后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.6 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.6]

2.修改从库node02节点的server.cnf文件

[root@node02 ~]# cat  /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
server_id=16
#log-bin= mysql-bin #log-bin是二进制文件
relay_log = relay-bin    # 中继日志, 后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.6 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.6]

3.重启node01和node02的mariadb服务

systemctl restart mariadb

六、查看mariadb主库状态

1.创建数据库用户

MariaDB [(none)]>  grant replication slave, replication client on *.* to 'redhat'@'%'  identified by 'admin';
Query OK, 0 rows affected (0.025 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

2.查看数据库用户信息

MariaDB [(none)]> select user,password,host from mysql.user;
+-------------+-------------------------------------------+-----------+
| User        | Password                                  | Host      |
+-------------+-------------------------------------------+-----------+
| mariadb.sys |                                           | localhost |
| root        | invalid                                   | localhost |
| mysql       | invalid                                   | localhost |
| redhat      | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 | %         |
+-------------+-------------------------------------------+-----------+
4 rows in set (0.002 sec)
MariaDB [(none)]> 

3.查看主库状态

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      659 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
MariaDB [(none)]> 

4.查看mysql-bin日志文件

[root@master ~]#  ll /var/lib/mysql/mysql-bin.index 
-rw-rw----. 1 mysql mysql 38 Nov 23 23:31 /var/lib/mysql/mysql-bin.index
[root@master ~]# cat  /var/lib/mysql/mysql-bin.index 
./mysql-bin.000001
./mysql-bin.000002

5.gtid查询

MariaDB [(none)]> select binlog_gtid_pos('mysql-bin.000002',659);
+-----------------------------------------+
| binlog_gtid_pos('mysql-bin.000002',659) |
+-----------------------------------------+
| 0-12-2                                  |
+-----------------------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]> 

七、启动从库

1.从库设置主库的gtid

MariaDB [(none)]>  set global gtid_slave_pos='0-12-2';
Query OK, 0 rows affected (0.080 sec)

2.连接主库

MariaDB [(none)]>  change master to master_host='192.168.3.171',master_user='redhat',master_password='admin',master_use_gtid=slave_pos;
Query OK, 0 rows affected (0.182 sec)

3.启动从库

MariaDB [(none)]>  start slave;
Query OK, 0 rows affected (0.123 sec)

4.查询从库状态

MariaDB [(none)]> show  slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.3.171
                   Master_User: redhat
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000002
           Read_Master_Log_Pos: 1450
                Relay_Log_File: relay-bin.000002
                 Relay_Log_Pos: 1461
         Relay_Master_Log_File: mysql-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: 1450
               Relay_Log_Space: 1764
               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: 12
                Master_SSL_Crl: 
            Master_SSL_Crlpath: 
                    Using_Gtid: Slave_Pos
                   Gtid_IO_Pos: 0-12-7
       Replicate_Do_Domain_Ids: 
   Replicate_Ignore_Domain_Ids: 
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 3
Slave_Non_Transactional_Groups: 2
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)
MariaDB [(none)]> 

八、测试主从同步

1.主库写入数据

MariaDB [(none)]> create database school;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> use school;
Database changed
MariaDB [school]> CREATE TABLE IF NOT EXISTS `student`(
    ->    `id` INT UNSIGNED AUTO_INCREMENT,
    ->    `name` VARCHAR(100) NOT NULL,
    ->    `gender` TINYINT NOT NULL,
    ->    `age` INT UNSIGNED,
    ->    `class` INT UNSIGNED,
    ->      `course` VARCHAR(100) NOT NULL,
    ->     `grade` INT UNSIGNED,
    ->    PRIMARY KEY ( `id` )
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.206 sec)
MariaDB [school]> insert into student ( name, gender, age, class, Course, grade ) values ( "高峰", "0", "22", "4", "英语", "100"), ( "陈林", "1", "15", "5", "化学", "99" );
Query OK, 2 rows affected (0.012 sec)
Records: 2  Duplicates: 0  Warnings: 0
MariaDB [school]> insert into student ( name, gender, age, class, course, grade ) values  ( "王明", "0", "16", "2", "数学", "88"),  ( "万易", "0", "17", "4", "地理", "79" ), ( "李依依", "1", "17", "3", "语文",  "90"  ) ;
Query OK, 3 rows affected (0.017 sec)
Records: 3  Duplicates: 0  Warnings: 0

2.主库查看数据表

MariaDB [school]> select * from school.student;
+----+-----------+--------+------+-------+--------+-------+
| id | name      | gender | age  | class | course | grade |
+----+-----------+--------+------+-------+--------+-------+
|  1 | 高峰      |      0 |   22 |     4 | 英语   |   100 |
|  2 | 陈林      |      1 |   15 |     5 | 化学   |    99 |
|  3 | 王明      |      0 |   16 |     2 | 数学   |    88 |
|  4 | 万易      |      0 |   17 |     4 | 地理   |    79 |
|  5 | 李依依    |      1 |   17 |     3 | 语文   |    90 |
+----+-----------+--------+------+-------+--------+-------+
5 rows in set (0.000 sec)
MariaDB [school]> 

3.从库查看数据表

[root@node01 ~]# hostname
node01
[root@node01 ~]# mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.6.11-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select * from school.student;
+----+-----------+--------+------+-------+--------+-------+
| id | name      | gender | age  | class | course | grade |
+----+-----------+--------+------+-------+--------+-------+
|  1 | 高峰      |      0 |   22 |     4 | 英语   |   100 |
|  2 | 陈林      |      1 |   15 |     5 | 化学   |    99 |
|  3 | 王明      |      0 |   16 |     2 | 数学   |    88 |
|  4 | 万易      |      0 |   17 |     4 | 地理   |    79 |
|  5 | 李依依    |      1 |   17 |     3 | 语文   |    90 |
+----+-----------+--------+------+-------+--------+-------+
5 rows in set (0.000 sec)
MariaDB [(none)]> 

以上就是Mariadb数据库主从复制同步配置过程实例的详细内容,更多关于Mariadb主从复制同步配置的资料请关注脚本之家其它相关文章!

相关文章

  • centos编译安装mariadb的详细过程

    centos编译安装mariadb的详细过程

    这篇文章主要介绍了centos编译安装mariadb的方法,主要包括安装cmake环境及安装mariadb的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下的相关资料
    2022-08-08
  • MariaDB性能调优工具mytop的使用详解

    MariaDB性能调优工具mytop的使用详解

    这篇文章主要给大家介绍了关于MariaDB性能调优工具mytop的使用,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 详谈MySQL和MariaDB区别与性能全面对比

    详谈MySQL和MariaDB区别与性能全面对比

    这篇文章主要介绍了详谈MySQL和MariaDB区别与性能全面对比,需要的朋友可以参考下
    2020-02-02
  • MariaDB Spider 数据库分库分表实践记录

    MariaDB Spider 数据库分库分表实践记录

    MariaDB Server 是开源的,目前最流行的关系型数据库之一,MariaDB 是从 Mysql 的分支开发而来,一直保持对 Mysql 的兼容性,这篇文章主要介绍了MariaDB Spider 数据库分库分表实践,需要的朋友可以参考下
    2022-02-02
  • mariadb 在低配 VPS 上崩溃问题处理方案

    mariadb 在低配 VPS 上崩溃问题处理方案

    本文给大家分享的是mariadb 在低配 VPS 上启动时崩溃问题的处理方案,附上解决过程,有需要的小伙伴可以参考下
    2016-09-09
  • MariaDB10.5.6的安装与使用详解

    MariaDB10.5.6的安装与使用详解

    这篇文章主要介绍了MariaDB10.5.6的安装与使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • MySQL分支选择参考:Percona还是MariaDB

    MySQL分支选择参考:Percona还是MariaDB

    这篇文章主要介绍了MySQL分支选择参考:Percona还是MariaDB,本文分别讲解了Percona、MariaDB背景知识,对使用它们的选择给出了参考,需要的朋友可以参考下
    2015-03-03
  • MariaDB数据库的外键约束实例详解

    MariaDB数据库的外键约束实例详解

    约束保证了数据的完整性和一致性。下面这篇文章主要给大家介绍了关于MariaDB数据库的外键约束的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • MongoDB启动报错 28663 Cannot start server

    MongoDB启动报错 28663 Cannot start server

    今天学习mongoDB的时候,启动总是失败,搜了好久找到这个文档解决了问题,是引擎的问题,需要的朋友可以参考下
    2020-02-02
  • 记一次mariadb数据库无法连接

    记一次mariadb数据库无法连接

    本文给大家分享的是一次mariadb数据库无法连接的处理方法,主要是给大家简单描述下处理的思路,希望对大家处理mariadb数据库有所帮助。
    2016-10-10

最新评论