主从配置的前提条件
1、MySQL版本一致;
2、MySQL中的数据一致;
主:192.168.16.135
从:192.168.16.137
在虚拟机中建两台服务器,两个都安装宝塔,将两个服务器的放火墙关闭
systemctl stop firewalld.service
两台虚拟机服务需要相互ping的通
1:配置主服务器mysql
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=135
##创建帐户'slave'使用 "%" 所有从服务的ip
grant replication slave on *.* to 'slave'@'%' identified by '123456';
##创建帐户'slave'使用从服务的ip
##grant replication slave on *.* to 'slave'@'192.168.16.137' identified by '123456';
查询用户
select user, host, password, from mysql.user;
查询master(主服务器)的状态, 需要用到 file position
show master status;
#[可选]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=137
重启mysql服务…进入mysql命令行
启动从服务器复制功能
change master to master_host='192.168.16.135',master_user='slave',master_password='123456',master_log_file='mysql-bin.000019',master_log_pos=3887;
然后 启动从服务器复制功能
start slave
检查从服务器复制功能状态
show slave status\G
##正确 这两个一定要yes
Slave_IO_Running: Yes
lave_SQL_Running: Yes
Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中 connect 和 NO均属错误)。
到这里就配置完成了,然后在主从服务器创建数据库和表,从服务器的mysql也会有数据库和表。
3:TP6配置分布式数据库
在database.php中:
两边的服务mysql用户名密码我都是一样的
如果不一样可以按照这样设置
测试:
public function add(){
$data = [];
for($i=0;$i<5;$i++){
array_push($data,['name'=>'name_'.($i+1)]);
}
$res = Db::name("student")->insertAll($data); //主库
dump('插入成功条数:' . $res);
}
public function list(){
$res = Db::table('student')->where('id','=',1)->find(); //从库
dump($res);
$row = Db::table('student')->where('id','=',$res['id'])->update(['name' => 'name_4']); //主库
echo $row;
// 在配置中 开启自动主库读取
//'read_master' => true,
//$res2 = Db::table('student')->where('id','=',1)->find(); //主库
$res2 = Db::table('student')->where('id','=',1)->master(true)->find(); //主库
dump($res2);
}
以上就是数据库读写分离、主从同步的框架内文件配置、数据库服务器文件配置和代码示例。