マスタースレーブ構成の前提条件
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);
}
読み取りと書き込みの両方に異なるサーバーが使用されていることがわかります。
上記は、データベースの読み取りと書き込みの分離、マスタースレーブの同期、データベースサーバーのファイル構成、およびコード例のフレームワークでのファイル構成です。