宝塔搭建 TP6 分布式数据库:主从同步、读写分离

主从配置的前提条件
1、MySQL版本一致;
2、MySQL中的数据一致;

主:192.168.16.135
从:192.168.16.137

在虚拟机中建两台服务器,两个都安装宝塔,将两个服务器的放火墙关闭

systemctl stop firewalld.service

两台虚拟机服务需要相互ping的通
宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第1张图片
1:配置主服务器mysql

#[必须]启用二进制日志 
log-bin=mysql-bin 
#[必须]服务器唯一ID,默认是1,一般取IP最后一段 
server-id=135

在这里插入图片描述
重启。。进入mysql命令行

##创建帐户'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;

宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第2张图片
2、配置slave(从服务器)mysql

#[可选]启用二进制日志 
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;
  • master_host=主服务器IP master_user=在主服务器上创建的备份用户名
  • master_password=备份用户密码
  • master_log_file=查询master(主服务器)的状态得到的File列的值
  • master_log_pos=Position列的值

然后 启动从服务器复制功能

start slave

检查从服务器复制功能状态

show slave status\G

宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第3张图片

##正确 这两个一定要yes
Slave_IO_Running: Yes 
lave_SQL_Running: Yes

Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中 connect 和 NO均属错误)。

到这里就配置完成了,然后在主从服务器创建数据库和表,从服务器的mysql也会有数据库和表。

3:TP6配置分布式数据库
在database.php中:
宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第4张图片
两边的服务mysql用户名密码我都是一样的
如果不一样可以按照这样设置
宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第5张图片
测试:

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);
    }

宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第6张图片

宝塔搭建 TP6 分布式数据库:主从同步、读写分离_第7张图片
可以看到读写都使用了不同的服务器。

以上就是数据库读写分离、主从同步的框架内文件配置、数据库服务器文件配置和代码示例。

你可能感兴趣的:(PHP,MySQL,thinkphp)