MySQL主从复制搭建(一主双从)

MySQL主从复制(一主双从)
一、环境介绍

MySQL之间数据复制的基础是二进制日志文件。MySQL数据库一旦启用二进制日志后,作为Master,它的数据库中所有操作都会以事件的方式记录在二进制日志中,其他数据库作为Slave通过一个I/O线程与主服务器保持通信,并监控Master的二进制日志文件的变化,如果发现Master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后Slave的一个SQL线程会把相关的事件执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

名称 IP 系统 端口 版本
Master(主数据库) 192.168.10.175 CentOS6.10 3306 MySQL 5.6.45
Slave(从数据库) 192.168.10.176 CentOS6.10 3306 MySQL 5.6.45
Slave(从数据库) 192.168.10.177 CentOS6.10 3306 MySQL 5.6.45
二、主从搭建
1.主从服务器安装MySQL数据库
yum -y install mysql*
2.修改MySQL数据库密码
service mysqld restart
mysql -u root -proot
use mysql;
set password for root@localhost = password('root');
3.配置主数据库(Master)
vim /etc/my.cnf
[mysqld]
# 添加以下内容
# 启用二进制日志
log-bin=mysql-bin
# 服务器唯一ID,默认是1,这里用的是IP最后一位
server-id=175
4.配置从数据库(Slave)
vim /etc/my.cnf
[mysqld]
# 添加以下内容
# 启用二进制日志
log-bin=mysql-bin
# 服务器唯一ID,默认是1,这里用的是IP最后一位
server-id=176
# 每个对应的数据库都需要修改,修改成server-id=IP
5.重启主从数据库
service mysqld restart
mysql -u root -proot
use mysql;
--操作的权限
grant all privileges on *.* to 'root'@'192.168.10.110' identified by 'root' with grant option;
6.在主数据库上建立帐户并授权(Slave)
update user set password=password('root') where user='root' and host='root' or host='localhost';
flush privileges;
grant replication slave on *.* to 'root'@'192.168.10.176' identified by 'root';
grant replication slave on *.* to 'root'@'192.168.10.177' identified by 'root';
# 刷新主从数据库的授权权限
flush privileges;

--参数解释:
-h : 指定客户端所要登录的MySQL主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
-REPLICATION SLAVE :分配复制权限
-*.* : 可以操作那个数据库
-root : 用户名
-'%' : 可以在所有的电脑上使用这个账号和密码登录
7.登录主数据库,查询Master的状态
show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
8.配置从数据库(Slave)
stop slave;
# 每个从数据库都需要配置
change master to master_host="192.168.10.175", master_user="root", master_password="root", master_log_file="mysql-bin.000004", master_log_pos=106;
flush privileges;
start slave;

--参数解释:
-master_host : 设置要连接的主数据库的IP地址
-master_user : 设置要连接的主数据库的用户名
-master_password : 设置要连接的主数据库的密码
-master_log_file : 设置要连接的主数据库的bin日志的日志名称(show master status;
-master_log_pos : 设置要连接的主数据库的bin日志的记录位置(show master status(这里注意,最后项不需要加引号。否则配置失败)
9.检查从数据库复制功能状态
show slave status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.176
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000004
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              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: 106
              Relay_Log_Space: 552
              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 #这个不能用来作为主从延迟的判断标准, 0不完全代表从数据库已经追上了主数据库,有可能是网络中断,但是超时时间还没有到,从数据库没有发现。
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

--参数解释:
-Slave_IO_Running=Yes
-Slave_SQL_Running=Yes
--如果都是Yes,则说明配置成功
--注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
--从库:Last_SQL_Errno: 1008
--将同步指针向下移动一个,可以重复操作
-stop slave;
-set global sql_slave_skip_counter=1;
-start slave;
-show slave status\G;
三、主从测试
1.主从数据库测试:

在主数据库(Master),建立数据库,并在这个库中建表增删修改数据

create database cluster;
use cluster;
create table user(id int(3),name char(10));
insert into user values(001,'SERE');
insert into user values(002,'Tom');
insert into user values(003,'Luck');
delete from user where id='2';
update user set name='Lilei' where id='1';
show databases;
show tables;
select * from user;
2.在从数据库(Slave)查询
show databases;
use cluster;
show tables;
select * from user;

猜你喜欢

转载自blog.csdn.net/SERE0211/article/details/106899558