MySQL的主从复制与MySQL的主主复制

一、MySQL的主从复制



注意事项:

主节点必须开启二进制日志,在从节点上务必开启中继日志;

中继日志:从服务器上记录下来从主服务器的二进制日志文件同步过来的事件;

下面来做一个小的实验,两个空的数据库的主从复制

配置前注意事项:务必同步时间 ntpdate 172.18.0.1

如果服务开启先停止服务,清空数据

systemctl stop mariadb

rm -rf /var/lib/mysql/*

实验演示:



1、主节点上的配置文件中定义如下


[server]              #在配置文件中找到[server]配置段定义
skip_name_resolve = on      #为了方便跳过地址解析
innodb_file_per_table = on
max_connections = 20000
                  #上述这些配置可以不用一定配置,但是建议可以写上
log_bin = master-log       #最主要的两项配置                                                              
server_id = 1
read_only=ON            #默认只读是打开的,可以不用设置

2、从节点上的配置


[server]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
relay_log = relay-log          #启动中继日志
server_id = 2              #这里的节点就不能为1,这是从节点

3、主节点上授权一个用户可以做复制操作


MariaDB [(none)]> grant replication client,replication slave on *.* to ‘repluser‘@‘172.18.77.%‘ identified by ‘centos‘;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File          | Position| Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |    495 |                    |
+-------------------+----------+--------------+------------------+

4、然后可以让从服务器来复制



设置从主服务器的哪个文件的哪个位置开始启动复制,要设置从服务器指的主服务器要使用下述的命令启动复制

MariaDB [(none)]> change master to master_host=‘172.18.77.7‘,master_user=‘repluser‘,master_password=‘centos‘,master_log_file=‘master-log.000003‘,master_log_pos=495;
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 172.18.77.7       ----------------->
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003      ----------------->
          Read_Master_Log_Pos: 495
               Relay_Log_File: relay-log.000001       ----------------->
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: No               -----------------> 这里为no表示复制还没有开启
            Slave_SQL_Running: No              ----------------->
              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: 495
              Relay_Log_Space: 245
              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: NULL               ------------------>
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: 0

“---------------->” 表示需要注意的点

现在可以开启复制功能

MariaDB [(none)]> start slave io_thread,sql_thread;
MariaDB [(none)]> show slave status\G;

上述已经完成了主从复制

5、测试:


MariaDB [(none)]> create database mydb;  在主节点上创建一个表
MariaDB [(none)]> show databases; 在从节点查看这个表是否已经复制过来
+--------------------+
| Database        |
+--------------------+
| information_schema |
| mydb          |
| mysql          |
| performance_schema |
| test          |
+--------------------+

二、MySQL的主主复制



主主复制:

互为主从:两个节点各自都要开启binlog和relay log;

1、数据不一致;

2、自动增长id;

定义一个节点使用奇数id

auto_increment_offset=1

uto_increment_increment=2

另一个节点使用偶数id

auto_increment_offset=2  id递增使用偶数

auto_increment_increment=2 id增长步进为2

配置:

1、server_id必须要使用不同值;

2、均启用binlog和relay log;

3、存在自动增长id的表,为了使得id不相冲突,需要定义其自动增长方式;

服务启动后执行如下两步:

4、都授权有复制权限的用户账号;

5、各把对方指定为主节点;

复制时应该注意的问题:

1、从服务设定为“只读”;

在从服务器启动read_only,但仅对非SUPER权限的用户有效;

阻止所有用户:

mysql> FLUSH TABLES WITH READ LOCK;

2、尽量确保复制时的事务安全

在master节点启用参数:

sync_binlog = ON

如果用到的是InnoDB存储引擎:

innodb_flush_logs_at_trx_commit=ON

innodb_support_xa=ON

3、从服务器意外中止时尽量避免自动启动复制线程

4、从节点:设置参数

sync_master_info=ON

sync_relay_log_info=ON

实验演示:

环境准备

两台主机   节点1: 172.18.77.7

节点2: 172.18.77.77

1、实验前先将mysql服务停止修改配置文件



在节点1上的配置如下

[[email protected] ~]#vim /etc/my.cnf.d/server.cnf 
[server]
log_bin = master-log
relay_log = relay-log
server_id = 1               -----------> 两台主机的server_id必须有一个为主
auto_increment_offset=1
auto_increment_increment=2


在节点2上的配置如下

[[email protected] ~]#vim /etc/my.cnf.d/server.cnf 
[server]
log-bin = master-log 
relay_log = relay-log
server_id = 2               ----------->
auto_increment_offset=2           ----------->
auto_increment_increment=2

2、查看两台主机各自处于二进制日志的哪个位置

[[email protected] ~]#mysql -pcentos   
MariaDB [(none)]> show master status; #节点1上的二进制日志所处的位置
+-------------------+----------+--------------+------------------+
| File          | Position| Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |    245 |         |          |
+-------------------+----------+--------------+------------------+
[[email protected] ~]#mysql
MariaDB [(none)]> show master status; #节点2上的二进制日志所处的位置
+-------------------+----------+--------------+------------------+
| File          | Position| Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000001 |  245   |          |         |
+-------------------+----------+--------------+------------------+

3、都授权有复制权限的用户账号



两个节点都要授权

[[email protected] ~]#mysql  #有密码用-p加密码就可以 也可用-u指明用户
MariaDB [(none)]> grant replication client,replication slave on *.* to ‘repluser‘@‘172.18.77.%‘ identified by ‘centos‘;

4、两个节点各把对方指定为主节点;并且指定从对方的哪个二进制日志文件的什么位置开始复制



第一个节点1

change master to master_host=‘172.18.77.77‘,master_user=‘repluser‘,master_password=‘centos‘,master_log_file=‘master-log.000001‘,master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G; #检查是否已经复制开启
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

第二个节点2

MariaDB [(none)]> change master to master_host=‘172.18.77.7‘,master_user=‘repluser‘,master_password=‘centos‘,master_log_file=‘master-log.000003‘,master_log_pos=245;
MariaDB [(none)]> show slave status\G; 
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

5、测试:



(1) 先在172.18.77.7这个节点上删除一行数据,在172.18.77.77这个节点上查看是否已经同步

MariaDB [hidb]> delete from students where id=998;

另一个节点上172.18.77.77查看 (没有998这行数据已经证明数据同步)

(2) 反过来测试:先在172.18.77.77这个节点上修改一行数据,在172.18.77.7这个节点上查看是否已经同步

MariaDB [hidb]> update students set major=‘tiantian‘ where id=995;
在172.18.77.7上查看
MariaDB [hidb]> select * from students;
.........
|  995 | stu995  |   39 | F      | tiantian |

(3) 插入一些数据检查id是否的递增(172.18.77.7); 我们在配置文件中定义的是以奇数递增的id号

MariaDB [hidb]> insert into students (name,age,gender,major) values (‘longmu‘,45,‘F‘,‘qilongpenhuo‘),(‘xiao emo‘,40,‘F‘,‘wenxue‘)
MariaDB [hidb]> select * from students;
.....   
| 1003 | longmu   |   45 | F      | qilongpenhuo   |
| 1005 | xiao emo |   40 | F      | wenxue     |
+------+----------+------+--------+----------------------------------+

在另一台节点上查看也是同步的

但是在另一台主机上(172.18.77.77)插入数据时显示如下

MariaDB [hidb]> insert into students (name,age,gender,major) values (‘zhoutou‘,76,‘F‘,‘tangtou‘),(‘yuqian‘,40,‘M‘,‘hejiu‘);
MariaDB [hidb]> select * from students;
......
| 1003 | longmu    |    45    | F         | qilongpenhuo  |
| 1005 | xiao emo  |    40    | F         | wenxue     |
| 1006 | zhoutou   |    76 v  | F         | tangtou    |
| 1008 | yuqian    |     40  | M          | hejiu     |
+------+----------+------+--------+----------------------------------------------+

实验证明id号的递增并不是从其中插入从1004开始的;这里希望可以注意一下

时间: 2024-10-08 11:37:05

MySQL的主从复制与MySQL的主主复制的相关文章

MySQL的主从复制是如何实现的

前言 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果. MySQL主从复制架构图 一主一从 master-slave-replication-01 一主多从 master-slave-replication-02 级联 master-slave-repli

MYSQL的主从复制与读写分离

在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性,高可用性,还是高并发性等各个方面都是不能满足实际需求,因此,一般来说都是通过主从复制的方式来同步诗句,再通过读写分离来提升数据库的并发负载能力这样的方案来实施和部署.MYSQL主从复制的原理MYSQL的主从复制和MYSQL的读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离.MYSQL读写分离原理读写分离就是只在主服务器上写,只能在从服务器上读.基本原理就是让主数据

MySQL 主从复制、主主复制、半同步复制

MySQL 复制 =============================================================================== 概述: =============================================================================== MySQL Replication:   1.主从复制的目的和架构 ★Master/Slave(主/从) Master: write/read Slave

MySQL数据的主从复制、半同步复制和主主复制详解

一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制.单向.异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环

mysql主从复制、主主复制与半同步复制的实现

1.主从复制 实验环境:2台装有mariadb的centos6,ip地址分别为192.168.198.203(master ),192.168.194.90(slave) 测试:在master上新建一个数据库,查看slave中是否同步 ##################################################### master上的配置: a. 启动二进制日志:在mariadb的配置文件/etc/my.cnf中添加 [mysqld] log_bin=mysql-bin

MySQL主从复制与主主复制

1.简介 MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一.但不可忽略的是它本身的功能的确很强大.随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器(这篇博客暂时不涉及).在此之前我们必须要保证每台MySQL服务器里的数据同步.数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制. 回到顶部 2.环境说明 两台linu

mysql主从复制、半同步复制、主主复制、及从库升级为主库讲解

一.主从复制结构 binlog dump --- io thread  ---  relay log ---- sql thread 1.总体讲解 主从复制时是异步的 半同步是在主从架构下安装插件来达到半同步的 半同步的优点:保证至少一个节点的数据和主节点的数据一致,缺点影响性能 导致主从不同步的原因是 现在的服务器都是单核多线程或者多核多线程,导致主节点可以同时执行多条读写操作,而记录二进制日志则必须按顺序有先后的记录,从节点在一条一条复制过去,生成中继日志,再执行语句. 多个库复制的话,可以

MySQL之备份还原,主从复制,主主复制。

数据库作为我们的日常工作中不可缺少的部分,那它内部数据的重要性显而易见,所以数据安全至关重要.确保数据的安全,我们就必须做好数据备份.简单说几个MySQL常用的备份工具以及如何利用这些工具实现数据的备份. 一:MySQL自带的工具---mysqldump,相信大家应该还有映像:# ls /usr/local/mysql/bi我们会看到此命令. 用法:mysqldump [options] [db_name [tbl_name ...]] 常用选项: --databases --备份数据库,后面可

Mysql实现数据库主从复制、主主复制、半同步复制

--------------Mysql实现数据库主从复制架构---------------- 一.环境准备: centos系统服务器2台.一台用户做Mysql主服务器,一台用于做Mysql从服务器,配置好yum源.防火墙关闭.各节点时钟服务同步.各节点之间可以通过主机名互相通信 192.168.41.145   master 192.168.41.137  slave 二.准备步骤: 1.iptables -F && setenforce 清空防火墙策略,关闭selinux 2.①vim