码迷,mamicode.com
首页 > 数据库 > 详细

Mariadb 主从复制

时间:2015-11-08 15:24:10      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:主机   服务器   应用程序   二进制   记录   

一、Mariabd数据复制原理和功能

        Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

        复制的功用:数据分布;负载均衡读;数据备份;高可用和故障切换;MySQL升级测试


二、Mariabd主从复制的实现

主节点(MASTER)配置

①、启动二进制日志为当前节点设置一个全局惟的ID号

[root@localhost ~]# vim /etc/my.cn
log_bin = mysql-bin                #启动二进制日志
server_id = 1                      #设置服务器ID
innodb_file_per_table = ON         #设置每表使用单独事务日志
skip-name-resolve                  #跳过域名解析
[root@localhost ~]# systemctl restart mariadb.service

②、创建有复制权限的用户账号

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘wlw‘@‘192.168.0.%‘ IDENTIFIED BY ‘wlw‘;
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      413 |              |                  |
+------------------+----------+--------------+------------------+
#这里二进制日志已经滚到到第三个文件了,前两个文件为数据库初始化创建的mysql管理库等信息,所以我们等一下配置
#配置从的Position只需要从这一刻的413开始即可

从节点(SLAVE)配置

①、启动中继日志、为当前节点设置一个全局惟的ID号

[root@localhost ~]# vim /etc/my.cn
relay_log = relay-log                    #启动中继日志
relay_log_index = relay-log.index
read-only = 1                            #开启只读模式,此限制对拥有SUPER权限的用户均无效
#如果需要锁定所有用户,可以执行SQL语句(FLUSH TABLES WITH READ LOCK;)
server_id = 8                            
innodb_file_per_table = ON
skip-name-resolve

②、配置前查看一下从服务器的状态和是否启动了复制线程

MariaDB [(none)]> SHOW SLAVE STATUS;
Empty set (0.01 sec)
#这里我们查看从服务器的状态,可以看到还没有配置,为空
MariaDB [(none)]> SHOW PROCESSLIST;
+----+------+-----------+------+---------+------+-------+------------------+----------+
| Id | User | Host      | db   | Command | Time | State | Info             | Progress |
+----+------+-----------+------+---------+------+-------+------------------+----------+
|  2 | root | localhost | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |    0.000 |
+----+------+-----------+------+---------+------+-------+------------------+----------+
#可以看到从服务器还没有启动复制线程

③、使用有复制权限的用户账号连接至主服务器,并启动复制线程

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘192.168.0.151‘, MASTER_USER=‘wlw‘, MASTER_PASSWORD=‘wlw‘, MASTER_LOG_FILE=‘mysql-bin.000003‘, MASTER_LOG_POS=413;
MariaDB [(none)]> START SLAVE;

配置后查看一下从服务器的状态和是否启动了复制线程

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.151            #主服务器IP
                  Master_User: wlw                      #复制授权的用户
                  Master_Port: 3306                     #主服务器端口
                Connect_Retry: 60                       #重试时间
              Master_Log_File: mysql-bin.000003         #读取二进制的文件
          Read_Master_Log_Pos: 413                      #读取二进制的开始位置
               Relay_Log_File: relay-log.000002         #读取的中继日志文件
                Relay_Log_Pos: 529                      #读取的中继日志位置
        Relay_Master_Log_File: mysql-bin.000003        
             Slave_IO_Running: Yes                      #I/O Thread启动
            Slave_SQL_Running: Yes                      #SQL Thread启动
              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: 413
              Relay_Log_Space: 817
              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
             
MariaDB [(none)]> SHOW PROCESSLIST;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             | Progress |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
|  2 | root        | localhost | NULL | Query   |    0 | NULL                                                                        | SHOW PROCESSLIST |    0.000 |
|  3 | system user |           | NULL | Connect |  404 | Waiting for master to send event                                            | NULL             |    0.000 |
|  4 | system user |           | NULL | Connect |  403 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |    0.000 |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
#可以看到启动了两个线程,一个时等待主服务器发送的时间,一个是读取中继日志做同步

[root@c7node1 ~]# ll /var/lib/mysql/master.info
-rw-rw----. 1 mysql mysql 75 Nov  8 09:00 /var/lib/mysql/master.info
#这个文件保存了主服务器的链接信息,包括账号密码等,下次重启服务会自动通过此文件连接主服务器
[root@c7node1 ~]# cat /var/lib/mysql/relay-log.info 
./relay-log.000002
691
mysql-bin.000003
575
#此文件保存从服务器使用的中继日志、POS和主服务器使用的二进制日志、POS,服务器启动也会读取此文件

⑤、测试实验结果,在主服务器创建数据库看从服务器是否自动复制

MariaDB [(none)]> CREATE DATABASE wlw;
MariaDB [(none)]> CREATE DATABASE WLW;

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| WLW                |
| mysql              |
| performance_schema |
| test               |
| wlw                |
+--------------------+
#可以看到主服务器创建的数据库从服务器已经自动复制完成


本文出自 “马尔高” 博客,请务必保留此出处http://kgdbfmwfn.blog.51cto.com/5062471/1710690

Mariadb 主从复制

标签:主机   服务器   应用程序   二进制   记录   

原文地址:http://kgdbfmwfn.blog.51cto.com/5062471/1710690

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