MySQL 主从复制搭建【实例精华】

MySQL主从复制

MySQL可以通过两种方式配置主从复制

  • 通过二进制日志(binary log)的方式;
  • 通过GTID(全局事务ID)方式,不过GTID方式仍然依赖MySQL的binary log。

ps:在搭建MyCAT读写分离,主从切换,必须先搭建好MySQL主从复制

搭建环境说明:

主机信息 ip地址 说明
itcast-01 192.168.79.130 装载mysql5.7x版本,用于master主服务
itcast-02 192.168.79.131 装载mysql5.7x版本,用于slave从服务

Linux下MySQL安装步骤说明

搭建binary log配置主从配置

binary log的核心是事件(event)。基本原理是:主服务器把所有对数据库的操作(例如update、delete,create等)作为一个事件,当有事件产生,就把它们写入到对应的binary log中,每个事件都对应一个位置(可以理解这个位置就是事件的编号)。然后从服务器读取主服务器中的日志文件来获取主服务产生的事件(把这些日志保存到从服务器本地的relay-log中),从而把主服务的数据库操作在从服务器中重复执行一次,达到数据复制的目的。
MySQL 主从复制搭建【实例精华】_第1张图片
由于一切操作都是基于binary log,因此主服务器必须开启log-bin选项,另外,主从服务器都必须分配一个唯一的server-id。

master服务配置步骤

第一步:修改my.cnf文件:
在[mysqld]段下添加:

#mysql主从复制配置
#指定需要同步的数据库,如果需要同步所有库就注释
binlog-do-db=kevin
#忽略同步的数据库
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=130

第二步:重启mysql服务
service mysqld restart
第三步:建立帐户并授权slave,确保账户能在主机登录
mysql>GRANT FILE ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’;
第四步: 授予Slave复制权,账户信息要在从机配置执行同步操作
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . to ‘root’@’%’ identified by ‘123456’;
刷新权限
mysql> FLUSH PRIVILEGES;
第五步:锁表,将数据库锁住,仅仅允许读,以保证数据一致性;
mysql> flush tables with read lock;
mysql> FLUSH PRIVILEGES;
#注意,锁定后,如果自己同步对方数据,同步前一定要记得先解锁!
解锁: mysql> unlock tables;
第六步: 查看主节点的master复制信息,获取日志的名称和位置信息

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |     2071 | kevin        | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

slave服务配置步骤

第一步:修改my.cnf文件
[mysqld]

server-id=166

第二步:配置从服务器,把主服务器的相关信息设置给从服务器
mysql>change master to master_host=‘192.168.79.130’,master_port=3306,master_user=‘root’,master_password=‘123456’,master_log_file=‘mysql-bin.000004’,master_log_pos= 2071

注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,master-log-pos中配置的主服务器最后一步position的值,master_log_file中配置的就是主服务器最后一步file对应的值。
第三步:启动从服务器复制功能
Mysql>start slave;
第四步:检查从服务器复制功能状态

mysql> show slave status 或 show slave status/G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.79.130
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 2071
               Relay_Log_File: itcast-02-relay-bin.000005
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              .....
                   Last_Errno: 0
                   Last_Error: 
          .....
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 130
                  Master_UUID: e11b3edf-5547-11ea-bb60-000c29abaa7c
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

通过上面的信息,可知主从复制环境已经OK(Slave_IO_Running和Slave_SQL_Running状态均为YES)

同步测试:

注意:
首先要确定master服务配置my.cnf上指定同步数据库名称binlog-do-db=kevin;如果创建其它数据库,则无法进行主从同步;
在master主节点上操作,创建数据库和表

  • 解锁数据库操作,在创建master服务时上锁,禁止数据库写操作
mysql> unlock tables;

  • 创建名称为kevin的数据库
mysql> CREATE DATABASE kevin CHARACTER SET utf8 COLLATE utf8_general_ci;  
  • 切换数据库
mysql> use kevin;
Database changed
  • 创建表
mysql> create table if not exists haha (id int(10) PRIMARY KEY AUTO_INCREMENT,name varchar(50) NOT NULL);

在slave节点上,查看数据库信息

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db2                |
| db3                |
| kevin              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

从slave数据库已经同步master数据库操作,双向都有kevin数据库和表

你可能感兴趣的:(mysql,mycat)