ThinkPHP 5+数据库主从配置

一、主多从配置
1.配置文件(可以配置在.env)
1)启用分布式数据库后,hostname参数是关键,hostname的个数决定了分布式数据库的数量,默认情况下第一个地址就是主服务器。
2)如果主从服务器的下列连接参数一致,只需要设置一个即可,对于不同的参数,可以分别设置。切记要么相同,要么每个都设置。

//数据库连接配置
 ‘DB_DEPLOY_TYPE’ => 1, //是否启用分布式
 ‘DB_RW_SEPARATE’ => true, //是否启用智能读写分离
 ‘DB_TYPE’ => ‘mysql’, // 数据库类型
 ‘DB_HOST’ => ‘192.168.20.128,192.168.20.129’, // 服务器地址,默认第一个配置是主库。后面为从库,多个从库则随机访问。
 ‘DB_NAME’ => ‘master,slave’, // 数据库名
 ‘DB_USER’ => ‘master,slave’, // 用户名
 ‘DB_PWD’ => ‘master,slave’, // 密码
 ‘DB_PORT’ => ‘3306’, // 端口
 ‘DB_PREFIX’ => ‘abc_’,//表名前缀

2.配置数据库
半自动复制插件脚本安装
登录MySQL执行脚本:
主库:

install plugin rpl_semi_sync_master soname ‘semisync_master.dll’;//windows系统
 install plugin rpl_semi_sync_master soname ‘semisync_master.so’;//linux系统

从库:

INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.dll’;//windows系统
 INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;//linux系统

主从数据库的my.cnf文件配置:
主库:

rpl_semi_sync_master_enabled=1
 rpl_semi_sync_master_timeout=1000 #此单位是毫秒
 log-bin=mysql-bin #打开日志(主机需要打开)
 server-id=1 #服务器id
 log-bin-index=mysql-bin.index
 sync_binlog=1
 #给从机同步的库,可以多个
 binlog-do-db=tp #从库的数据库名称
 binlog-ignore-db=mysql
 binlog-ignore-db=performance_schema
 binlog-ignore-db=information_schema
 expire_logs_days=1

从库:
rpl_semi_sync_slave_enabled=1
server-id=2 #服务器id
#要从主机同步的库
replicate-do-db=tp #主库的数据库名

配置后之后重启服务
SHOW MASTER STATUS; #查看主服务状态

配置从数据库
CHANGE MASTER TO MASTER_HOST=‘主数据库IP’,
MASTER_USER=‘账号’,
MASTER_PASSWORD=‘用户密码’,
MASTER_LOG_FILE=‘mysql-bin.000008’,//日志
MASTER_LOG_POS=107;//端口
start slave; #开启SLAVE同步
show slave status \G; #查看下slave状态

Slave_IO_Running: NO
原因:1.MASTER_LOG_POS端口要对应。2.server_id要区分。3.日志名称要一致

3.提醒注意
(1)主库从库数据库名称一致不容易出错。
(2)配置完主从不能退出主库的mysql,不然端口会更换。需要配置主库。
开启master 和 slave 上的gtid功能 、开启read_only 功能。这都通过my.cnf文件配置下就行啦。
命令:set global read_only=1; 成功之后MASTER_LOG_POS会自动更新。
(3)在从库连接一下远程的数据库。看能不能连。如果能连。一般来说都是没问题的
命令:mysql -h主服务器ip -u刚刚主服务器设置的账号 -p密码
(4)端口名称每次重启服务器都会更新。有了第二步操作则不需要这一步操作。
①需要stop slave; #停止SLAVE同步
②再执行一次从数据库配置
CHANGE MASTER TO MASTER_HOST=‘主数据库IP’,
MASTER_USER=‘账号’,
MASTER_PASSWORD=‘用户密码’,
MASTER_LOG_FILE=‘mysql-bin.000008’,//日志
MASTER_LOG_POS=107;//端口
③start slave; #开启SLAVE同步
④show slave status \G; #查看下slave状态