• 企业架构LNMP学习笔记39


    MySQL读写分离案例实现:

    搭建M-S复制

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

    服务器名称IP地址
    server02192.168.17.108
    server06192.168.17.112

    1、master配置:

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

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

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

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

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

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

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

    log_bin: 以主机名命名。

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

    systemctl restart mysql

    检查生成的日志文件:

    制作一个完整的备份:

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

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

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

    show master status;

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

    slave配置:

    恢复备份文件:

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

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

    vim /etc/my.cnf

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

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

    配置slave replication:

    help change master to

     

    参数说明

    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日志文件对应的位置

     

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

    1. mysql> show slave status\G;
    2. *************************** 1. row ***************************
    3. Slave_IO_State: Waiting for master to send event
    4. Master_Host: 192.168.17.108
    5. Master_User: slave
    6. Master_Port: 3306
    7. Connect_Retry: 60
    8. Master_Log_File: mysql-index.000003
    9. Read_Master_Log_Pos: 120
    10. Relay_Log_File: server06-relay-bin.000002
    11. Relay_Log_Pos: 285
    12. Relay_Master_Log_File: mysql-index.000003
    13. Slave_IO_Running: Yes
    14. Slave_SQL_Running: Yes
    15. Replicate_Do_DB:
    16. Replicate_Ignore_DB:
    17. Replicate_Do_Table:
    18. Replicate_Ignore_Table:
    19. Replicate_Wild_Do_Table:
    20. Replicate_Wild_Ignore_Table:
    21. Last_Errno: 0
    22. Last_Error:
    23. Skip_Counter: 0
    24. Exec_Master_Log_Pos: 120
    25. Relay_Log_Space: 461
    26. Until_Condition: None
    27. Until_Log_File:
    28. Until_Log_Pos: 0
    29. Master_SSL_Allowed: No
    30. Master_SSL_CA_File:
    31. Master_SSL_CA_Path:
    32. Master_SSL_Cert:
    33. Master_SSL_Cipher:
    34. Master_SSL_Key:
    35. Seconds_Behind_Master: 0
    36. Master_SSL_Verify_Server_Cert: No
    37. Last_IO_Errno: 0
    38. Last_IO_Error:
    39. Last_SQL_Errno: 0
    40. Last_SQL_Error:
    41. Replicate_Ignore_Server_Ids:
    42. Master_Server_Id: 1
    43. Master_UUID: e7e1e13c-48c0-11ee-97ef-000c2961eeaf
    44. Master_Info_File: /usr/local/mysql/data/master.info
    45. SQL_Delay: 0
    46. SQL_Remaining_Delay: NULL
    47. Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
    48. Master_Retry_Count: 86400
    49. Master_Bind:
    50. Last_IO_Error_Timestamp:
    51. Last_SQL_Error_Timestamp:
    52. Master_SSL_Crl:
    53. Master_SSL_Crlpath:
    54. Retrieved_Gtid_Set:
    55. Executed_Gtid_Set:
    56. Auto_Position: 0
    57. 1 row in set (0.00 sec)
    58. ERROR:
    59. No query specified
    60. mysql>

     

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

    那么现在做一个测试:

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

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

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

    两个线程遇到的问题:

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

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

  • 相关阅读:
    月薪10.8K|销售客服转行软件测试斩获4份offer,所有的惊艳都来自长久的准备
    STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片
    怎么配置Maven的镜像仓库才是正确的
    基于DevExpress的GridControl实现的一些界面处理功能
    Android Media Framework(三)OpenMAX API阅读与分析
    Hbase Java API原理介绍
    B Label, BL Label 指令
    OpenAI停服,国产大模型免费用!开发者Token自由实现了
    解读论文《Agglomerative clustering of a search engine query log》,以解决搜索推荐相关问题
    vue:基础:生命周期
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/132811830