企业架构LNMP学习笔记39

MySQL读写分离案例实现:

搭建M-S复制

主从复制的原理:主服务器开启bin-log(记录了写操作),从服务器获取到主服务器的bin-log,记录到relay-log中。从服务器在通过异步的线程方式,对于relay-log进行重放操作。

企业架构LNMP学习笔记39_第1张图片

企业架构LNMP学习笔记39_第2张图片

服务器名称 IP地址
server02 192.168.17.108
server06 192.168.17.112

1、master配置:

1)在master服务器授权,slave服务器replication slave权限。

slave是通过MySQL连接登录到master上来读取二进制日志的,因此要在master给slave配置权限:

grant replication slave on *.* to 'slave'@'192.168.17.112' identified by '123456';
flush privileges;

 然后在另外slave服务器上进行下登录测试:

企业架构LNMP学习笔记39_第3张图片

 这个slave是到master服务器上读日志文件的,所以它的权限是有限的。

2)master服务器上打开bin-log日志,并标识server-id:

企业架构LNMP学习笔记39_第4张图片

 server-id=1,不是图中的下划线。

log_bin: 以主机名命名。

然后是重启mysql使配置生效。

systemctl restart mysql

检查生成的日志文件:

企业架构LNMP学习笔记39_第5张图片

制作一个完整的备份:

如果确认主从的数据库,默认开始数据是一致的,可以不做备份。

mysqldump -uroot -p'123456' --all-databases > /root/mysql.sql

 查看master上的bin-log及其position位置:

show master status;

企业架构LNMP学习笔记39_第6张图片

查看并记录File的值,Position的值。之后需要在服务器上,指向这些信息。

企业架构LNMP学习笔记39_第7张图片

slave配置:

恢复备份文件:

如果slave和master的数据本身就是相同的,可以不选择备份和导入。

配置server-id,标识服务器:

vim /etc/my.cnf

企业架构LNMP学习笔记39_第8张图片

由于是克隆获取的MySQL实例,所以auto.conf里面记录的UUID一样,需要删除/usr/local/mysql/data/auto.conf文件,否则主从无法识别互相身份,重新自动生成新的即可。

企业架构LNMP学习笔记39_第9张图片

我这边还需要了一个问题,就是mysql启动不成功,然后我把虚拟机重新进行了启动,把mysql的问题解决了。这个问题得到了解决。 

配置slave replication:

help change master to

企业架构LNMP学习笔记39_第10张图片

 企业架构LNMP学习笔记39_第11张图片

参数说明

master_host 主master的IP

master_user 主master允许登录,拥有replication slave权限

master_password 用户的密码

需要通过mysql > show master status; 在master执行

master_log_file 主master记录的bin-log日志文件名称

master_log_pos 主master记录的bin-log日志文件对应的位置

 

企业架构LNMP学习笔记39_第12张图片

 然后再检查下show slave status\G;

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.17.108
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-index.000003
          Read_Master_Log_Pos: 120
               Relay_Log_File: server06-relay-bin.000002
                Relay_Log_Pos: 285
        Relay_Master_Log_File: mysql-index.000003
             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: 120
              Relay_Log_Space: 461
              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
                  Master_UUID: e7e1e13c-48c0-11ee-97ef-000c2961eeaf
             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 the slave I/O thread to update it
           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
1 row in set (0.00 sec)

ERROR:
No query specified

mysql>

 企业架构LNMP学习笔记39_第13张图片

查看到两个yes,主从复制成功。否则,查看显示最下面信息,通过error信息进行排查问题。

那么现在做一个测试:

1)在master上建一个库,进行测试:

企业架构LNMP学习笔记39_第14张图片

slave上已经看到有testslave这个数据库了。

企业架构LNMP学习笔记39_第15张图片

然后再看查看相关信息,可以看到日志也发生了一些变化:

企业架构LNMP学习笔记39_第16张图片

两个线程遇到的问题:

IO error:正常是查找不到文件。

SQL error: 一般是重放的时候出问题。

你可能感兴趣的:(Nginx,MySQL数据库,架构)