PagodaはTP6分散データベースを構築します:マスター/スレーブ同期、読み取り/書き込み分離

マスタースレーブ構成の前提条件
1.MySQLのバージョンに一貫性がある;
2。MySQLのデータに一貫性がある。

マスター:192.168.16.135
スレーブ:192.168.16.137

仮想マシンに2つのサーバーを構築し、両方に塔を設置し、2つのサーバーのファイアウォールを閉じます

systemctl stop firewalld.service

2つの仮想マシンサービスが相互にpingを実行する必要があります
ここに画像の説明を挿入
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;

ここに画像の説明を挿入
マスター(マスターサーバー)のステータスを照会するには、ファイルの位置が必要です

show master status;

ここに画像の説明を挿入
2.スレーブ(スレーブサーバー)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 =マスターサーバーIPmaster_user =マスターサーバーで作成されたバックアップユーザー名
  • master_password =バックアップユーザーパスワード
  • master_log_file =マスター(マスターサーバー)のステータスを照会して取得した[ファイル]列の値
  • master_log_pos =位置列の値

次に、サーバーからコピー機能を開始します

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

ここに画像の説明を挿入

ここに画像の説明を挿入
読み取りと書き込みの両方に異なるサーバーが使用されていることがわかります。

上記は、データベースの読み取りと書き込みの分離、マスタースレーブの同期、データベースサーバーのファイル構成、およびコード例のフレームワークでのファイル構成です。

おすすめ

転載: blog.csdn.net/hgb24660/article/details/115351386