码迷,mamicode.com
首页 > 系统相关 > 详细

Linux九阴真经之九阴白骨爪残卷15

时间:2018-06-22 22:51:13      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:stat   配置   roo   iter   TE   comm   相关   logs   mys   

一、MySQL复制相关概念

1、主从复制:主节点将数据同步到多个从节点

2、级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据

3、同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制

4、异步复制:只要数据写入到主节点就立即返回给用户同步完成

5、读写分离:在前端加一个调度器,负责将改变数据的语句和查询数据的语句分开调度,把写操作调度到主节点,读操作调度到从节点

技术分享图片

主节点:

  • dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events

从节点:

  • I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
  • SQL Thread:从中继日志中读取日志事件,在本地完成重放

跟复制功能相关的文件:

  • master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
  • relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

复制架构:

  • 一主一从
  • 一主多从
  • 主主复制
  • 环状复制
  • 级联复制
  • 多主一从

常见的架构有主从架构或者级联架构

二、简单的一主一从架构实现

技术分享图片

 

一、数据库搭建主从架构

 

1、主服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ROW
    log-basename=master1
    server_id=1
~]# systemctl restart mariadb
~]# mysql
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO testuser@192.168.95.5 IDENTIFIED BY testpass;  #授权同步账户及主机IP
MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| master1-bin.000001 |     26756 |
| master1-bin.000002 |    921736 |
| master1-bin.000003 |       401 |  #记录此位置,从服务器从这里开始同步
+--------------------+-----------+

 

2、从服务配置

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2  #服务器ID唯一
    relay_log=relay-log
    relay_log_index=relay-log.index
    read_only=ON
~]# systemctl restart mariadb
~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST=192.168.95.2,  #指定主节点IP
    -> MASTER_USER=testuser,  #同步用户的用户名
    -> MASTER_PASSWORD=testpass,  #密码
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE=master1-bin.000003,  #主服务器记录的文件
    -> MASTER_LOG_POS=401,  #位置
    -> MASTER_CONNECT_RETRY=10;  #重试时间10秒--可省略
MariaDB [(none)]> START SLAVE;  #开始主从复制

 

实验到此就完成了 新数据库的主从服务器的搭建,此时主服务器的文件有任何更改将会同步到服务器上。如果从服务器重启,主服务器在此时更新了问你件,待从服务器启动之后,数据会自动同步。

 

3、测试

在主节点上生成一些数据:
MariaDB [(none)]> CREATE DATABASE testdb;
MariaDB [(none)]> use testdb
MariaDB [testdb]> create table testlog (id int auto_increment primary key,name char(30),age int default 20);
MariaDB [testdb]> delimiter $$
MariaDB [testdb]> create procedure pro_testlog()
    -> begin
    -> declare i int;
    -> set i = 1;
    -> while i < 100000
    -> do insert into testlog(name,age) values (concat(testuser,i),i);
    -> set i = i +1; 
    -> end while;
    -> end$$
MariaDB [testdb]> delimiter ;
MariaDB [testdb]> START TRANSACTION;
MariaDB [testdb]> CALL pro_testlog;
MariaDB [testdb]> COMMIT;

 

在从节点上查看同步情况:
MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| COUNT(*) |
+----------+
|    99999 |  #同步成功
+----------+
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ****************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.95.2
                  Master_User: testuser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: master1-bin.000003
          Read_Master_Log_Pos: 10389814
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 10389944
        Relay_Master_Log_File: master1-bin.000003
             Slave_IO_Running: Yes  #IO线程已启动
            Slave_SQL_Running: Yes  #SQL线程已启动
        Seconds_Behind_Master: 0    #主从复制的时间差
             Master_Server_Id: 1

 

二、旧数据库新加从服务器

 

1、主服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ROW
    log-basename=master1
    server_id=1
~]# systemctl restart mariadb
~]# mysqldump -A -F --single-transaction --master-data=1 > full.sql  #完全备份到文件内
~]# scp full.sql root@192.168.95.5:/root/   #将安全备份复制到远程主机
~]# mysql -e GRANT REPLICATION SLAVE ON *.* TO testuser@192.168.95.5 IDENTIFIED BY testpass;

 

2、从服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2
    relay_log=relay-log   
    relay_log_index=relay-log.index
    read_only=ON
~]# systemctl restart mariadb
~]# vim full.sql  #在备份的SQL文件中加入以下信息
    CHANGE MASTER TO
    MASTER_HOST=192.168.95.2,
    MASTER_USER=testuser,
    MASTER_PASSWORD=testpass,
    MASTER_PORT=3306,
    MASTER_LOG_FILE=master1-bin.000005,
    MASTER_LOG_POS=245,
    MASTER_CONNECT_RETRY=10;
~]# mysql < full.sql  #导入SQL的同时配置已经完成
MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| COUNT(*) |
+----------+
|    99999 |
+----------+
MariaDB [(none)]> START SLAVE;  #启动复制

 

3、查看同步状态

show slave status\G 

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.95.2
Master_User: laobai
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master1-bin.000003
Read_Master_Log_Pos: 245
Relay_Log_File: mariadb-relay-bin.000005
Relay_Log_Pos: 531
Relay_Master_Log_File: master1-bin.000003
Slave_IO_Running: Yes      #同步状态正常 
Slave_SQL_Running: Yes     

 

Linux九阴真经之九阴白骨爪残卷15

标签:stat   配置   roo   iter   TE   comm   相关   logs   mys   

原文地址:https://www.cnblogs.com/huxiaojun/p/9215517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!