Thinkphp + Mysql 实现读写分离 主从同步

Thinkphp + Mysql 实现读写分离 主从同步

内容清单,thinkphp环境+两个mysql

读写分离,主从同步优势

  • 可以实时灾备,用于故障切换;
  • 读写分离,提供查询服务,实现负载均衡;
  • 数据热备,避免影响业务。

读写分离,主从同步原理

  • 主服务器 MySQL 服务将所有的写操作记录在 binlog 日志中,并生成 log dump 线程,将 binlog 日志传给从服务器 MySQL 服 务的 I/O 线程。
  • 从服务器 MySQL 服务生成两个线程,一个是 I/O 线程,另一个是 SQL 线程。
  • 从库 I/O 线程去请求主库的 binlog 日志,并将 binlog 日志中的文件写入 relaylog(中继日志)中。
  • 从库的 SQL 线程会读取 relaylog 中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终两个数据库数据一致的目的。

Thinkphp配置

  • 修改config/database.php
    // 启用分布式数据库
    'deploy'    =>  1,
    // 数据库类型
    'type'        => 'mysql',
    // 服务器地址
    'hostname'    => '192.168.1.1,192.168.1.2',
    // 数据库名
    'database'    => 'demo1,demo2',
    // 数据库用户名
    'username'    => 'root1,root2',
    // 数据库密码
    'password'    => 'pass1,pass2',
    // 数据库连接端口
    'hostport'    => '3306',
    //开启读写分离
    'rw_separate'     => true,
    

Mysql配置

这里 'deploy'    =>  1,表示启用分布式数据库 'rw_separate'     => true,开启读写分离
demo1,demo2代表你两个数据库名,其他类似。
  • 配置mysql主从同步

    • 修改mysql配置文件,我用的宝塔安装的在(etc/my.cnf)下
    • log-bin=mysql-bin打开
    • server-id = 1这个表示主库和从库要不一样,随便取值。
    • 以上操作主库从库都要配置
  • 主库配置

    • 创建用户,每一个从服务器都需要用到一个账户名和密码来连接主服务器,可以为每一个从服务器都创建一个账户,也可以让全部服务器使用同一个账户。下面就为同一个ip网段的所有从服务器创建一个只能进行主从同步的账户。首先登陆mysql,然后创建一个用户名为master,密码为123456的账户,该账户可以被192.168.1.1使用,且该账户只能进行主从同步
    • CREATE USER 'master'@'192.168.1.1' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE ON *.* TO 'master'@'1192.168.1.1' IDENTIFIED BY '123456' WITH GRANT OPTION;

  • 从库配置

    • 在从库服务器Mysql上
      CHANGE MASTER TO
      MASTER_HOST='192.168.1.1',
      MASTER_USER='master',
      MASTER_PASSWORD='123456',
      MASTER_LOG_FILE='mysql-bin.000097',
      MASTER_LOG_POS=1507;

    • 查看LOG_FILE和POS在主服务器上mysql输入show master status\G即可看到,千万不要直接复制我上面的配置,如果你已经复制并执行了,那你可以stop slave关闭服务,然后再重新执行新的配置,重启mysql即可。

发布了4 篇原创文章 · 获赞 0 · 访问量 68

猜你喜欢

转载自blog.csdn.net/qq_32450143/article/details/105047869