首页 > 其他分享 >mariadb主从复制及主主复制的实现

mariadb主从复制及主主复制的实现

时间:2023-10-07 15:12:17浏览次数:37  
标签:主从复制 MariaDB log none master 及主主 sec mariadb

 

#实现主从复制配置,官网参考
https://dev.mysql.com/doc/refman/8.0/en/replication-configuration.html
https://dev.mysql.com/doc/refman/5.7/en/replication-configuration.html
https://dev.mysql.com/doc/refman/5.5/en/replication-configuration.html
https://mariadb.com/kb/en/library/setting-up-replication/

#一、两台centos8安装mariadb10.3.28 实现主从复制

#主节点配置:
[root@Centos8 ~]##hostnamectl set-hostname master
[root@master ~]#yum install -y mariadb-server
[root@master ~]#vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
log_bin
server-id=11

#设置开机自启并启动服务
[root@master ~]#systemctl --now enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.



#登录数据库
[root@master ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.28-MariaDB-log 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)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 343 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
#创建复制账号
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'10.0.0.%' identified by 'replpass';
Query OK, 0 rows affected (0.000 sec)
#刷新权限
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
#查看二进制文件名称及位置,后面从节点会用到
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 | 343 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
#退出数据库
MariaDB [(none)]> exit
Bye


#从节点配置:
[root@Centos8 ~]#hostnamectl set-hostname slave1
[root@slave1 ~]#yum install -y mariadb-server
[root@slave1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
server_id=22
log-bin
read_only=ON
relay_log=relay-log
relay_log_index=relay-log.index

[root@slave1 ~]#systemctl --now enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

#使用有复制权限的用户账号连接至主服务器,并启动复制线程
[root@slave1 ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.28-MariaDB-log 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)]> change master to master_host='10.0.0.150',master_user='repluser',master_password='replpass',master_log_file='master-bin.000003',master_log_pos=343;
Query OK, 0 rows affected (0.002 sec)

#开始从节点复制
MariaDB [(none)]> start slave ;
Query OK, 0 rows affected (0.001 sec)
#查看从节点复制状态
MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.150
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000003
Read_Master_Log_Pos: 343
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 556
Relay_Master_Log_File: master-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes #出现这两个yes表示连接成功,配置成功




#说明,从节点配置错误,清除信息后检查从节点配置重新配置change master to
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> reset slave all;
Query OK, 0 rows affected (0.000 sec)

#验证主从复制
#主节点创建数据库
第一次查看数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

主节点创建test111数据库
MariaDB [(none)]> create database test111;
Query OK, 1 row affected (0.000 sec)

#从节点查看是否同步
第一次查看数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

在主节点创建test111数据库后,在从节点查看数据库,发现已经同步过来
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test111 |
+--------------------+
4 rows in set (0.000 sec)




#二、两台centos8安装mariadb10.3.28 实现主主复制
主主复制:两个节点,都可以更新数据,并且互为主从
容易产生的问题:数据不一致;因此慎用
考虑要点:自动增长id
配置一个节点使用奇数id
auto_increment_offset=1   #开始点
auto_increment_increment=2 #增长幅度
另一个节点使用偶数id
auto_increment_offset=2
auto_increment_increment=2
主主复制的配置步骤简述:
(1) 各节点使用一个惟一server_id
(2) 都启动binary log和relay log
(3) 创建拥有复制权限的用户账号
(4) 定义自动增长id字段的数值范围各为奇偶
(5) 均把对方指定为主节点,并启动复制线程

主主复制的具体实现步骤:
#第一台mster节点
[root@master1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
log_bin
server-id=11
auto_increment_offset=1
auto_increment_increment=2

[root@master1 ~]#systemctl restart mariadb
[root@master1 ~]#mysql
MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| master1-bin.000001 | 330 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| master1-bin.000001 | 330 |
+--------------------+-----------+
1 row in set (0.000 sec)
#说明,如果是先查看在创建复制账号,则下面的创建账号信息不会同步到从节点。如果先创建的复制账号,再查看的二进制文件位置,则会把账号创建也复制过去。
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'*' identified by 'replpass';
MariaDB [(none)]>flush privileges;



#第二台master节点
[root@master2 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server_id=22
log-bin
auto_increment_offset=2
auto_increment_increment=2
[root@master2 ~]#systemctl restart mariadb
[root@master2 ~]#mysql
MariaDB [(none)]> change master to master_host='10.0.0.150',master_user='repluser',master_password='replpass',master_log_file='master1-bin.000001',master_log_pos=330;
Query OK, 0 rows affected (0.011 sec)

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

MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| master2-bin.000001 | 913 |
+--------------------+-----------+
1 row in set (0.000 sec)

#因上面没有先创建复制用户再查看二进制文件位置,所以创建账号这步没有同步过来,因此这台也要创建复制账号。
MariaDB [(none)]>grant replication slave on *.* to 'repluser'@'*' identified by 'replpass';
MariaDB [(none)]>flush privileges;

#回到第一台master节点
因为第一台的复制账号信息已经同步到第二台机器,因此有复制账号了,直接配置change master to

MariaDB [(none)]> change master to master_host='10.0.0.160',master_user='repluser',master_password='replpass',master_log_file='master2-bin.000001',master_log_pos=913;
Query OK, 0 rows affected (0.014 sec)
#启动复制线程
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)

#验证
#第一台
MariaDB [(none)]> create database d111;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| d111 |
| d222 |
| information_schema |
| mysql |
| performance_schema |
| t1 |
| test111 |
+--------------------+
7 rows in set (0.000 sec)

#第二台
MariaDB [(none)]> create database d222;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| d111 |
| d222 |
| information_schema |
| mysql |
| performance_schema |
| t1 |
| test111 |
+--------------------+
7 rows in set (0.000 sec)

标签:主从复制,MariaDB,log,none,master,及主主,sec,mariadb
From: https://www.cnblogs.com/tanll/p/17746340.html

相关文章

  • xtrabackup实现全量+增量+binlog恢复mariadb数据库
     #一、利用xtrabackup实现完全备份及还原1.下载并安装xtrabackup包[root@centos8~]#wgethttps://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm......
  • redis主从复制基础上搭建哨兵模式
    假如156和157是不同的两台服务器两台redis主从复制基础上搭建哨兵模式如下156redis.confmasterauth123456bind0.0.0.0requirement123456daemonizeyessentinel.confsentinelauth-passmymaster123456sentinelmonitormymaster10.190.107.15663792157......
  • 【MacOs】 安装 MariaDB
    1安装MairaDB在MacOS的终端上执行如下命令就可以安装MariaDB:brewinstallmariadb 如果希望启动MariaDB服务器:brewservicesstartmariadb 这个命令也设置每次重新启动电脑,自动启动MariaDB服务。如果希望关闭MariaDB服务器,可以使用命令:brewservice......
  • MySQL运维2-主从复制
    一、主从复制概念主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从服务器中,然后在从服务器上对这些日志重新执行也叫重做,从而使得从数据库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行赋值,从库同时也可以作为其他从服务器的主库,实现链式复制。......
  • 【Mysql主从复制】1主多从
    这里使用docker进行演示两台mysql主从搭建1:使用Docker启动俩个Mysql容器,配置挂载数据与配置文件传送门:https://www.cnblogs.com/wanghong1994/p/17731143.html创建完后应该就有俩个Mysql(或者你有两个服务器,启动了mysql并且配置完成):[root@VM-12-9-centos/]#dockerp......
  • GreatSQL一个关于主从复制的限制描述与规避
    一、背景分享一个在项目运维中遇到的一个主从复制限制的一个坑,项目的架构为主集群+灾备集群,每个集群为一主两从模式。主集群到灾备集群的同步为主从复制的方式,根据业务需求灾备集群需要忽略系统库跟某些配置表,所以才会触发此限制,而这个限制如果我们之前没有遇到过,那么排查起来也......
  • Redis 主从复制、哨兵模式、群集模式
    Redis主从复制、哨兵模式、群集模式目录1.Redis的2种持久化方式2.Redis优化3.Redis主从复制的原理3.1配置文件3.2Redis主从复制4.Redis哨兵模式4.1哨兵机制4.2哨兵模式的作用4.3哨兵结构4.4哨兵模式配置1.Redis的2种持久化方式RDB持久化定时把red......
  • MySQL主从复制实践
    MySQL主从复制实践多个数据库间主从复制与读写分离的模型​ 在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化;业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行​ Mysql主从复制的实现原理图大致如下​......
  • MySQL主从复制与读写分离
    一、MySQL主从复制与读写分离1、什么是读写分离?读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。2、为什么要读写分离呢?因为数据库的“写”(写......
  • Redis主从复制,高可用性面试题
    参考链接:https://xiaolincoding.com/redis/cluster/master_slave_replication.html#%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%90%8C%E6%AD%A5 主从第一步同步的过程? 分成三步进行:1、建立连接,从服务器获得主服务的id和复制位置,一开始是-1。2、主服务器fork一个子进程用来创建当前的R......