需要用到2个数据库一主一从
首先配置主数据库:
找到my.cnf
进入
在[mysqld]下添加
log-bin=mysql-bin
server-id不能和从库一样
如下:
登录Linux系统后,切换到MySQL安装目录。如果是宝塔cd ../www/server/mysql
登录MySQL服务:mysql -u root -p 回车输入密码在回车
创建一个用于从库访问主库的账号
创建一个账号,拥有所有权限
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave' WITH GRANT OPTION;
刷新权限
flush privileges;
重点:在这里重启两台mysql服务器~
查看主服务器的状态
show master status
如下:
记录两个值
切换从库
执行下列sql语句,链接主库
CHANGE MASTER TO
master_host='主库IP',
master_port=3306,
master_user='slave',
master_password='slave',
master_log_file='主库状态中的记录值',
master_log_pos=主库状态中的记录值;
如果无法执行以上sql语句,可能是你之前配置过,在所有操作之前,一定要执行一下 stop slave 停止从库
启动从库
start slave;
查看从库状态
show slave status\G
效果如下
结果之中,以上两个值必须为 YES,否则配置就是失败的
到目前为止,我们主从就配好了! 接下来我们来测试一下!
既然成功了 就需要读写分离
TP框架中的配置
tp6 主从复制database配置
<?php
return [
// 默认使用的数据库连接配置
'default' => env('database.driver', 'mysql'),
// 自定义时间查询规则
'time_query_rule' => [],
// 自动写入时间戳字段
// true为自动识别类型 false关闭
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date
'auto_timestamp' => true,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 时间字段配置 配置格式:create_time,update_time
'datetime_field' => '',
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '主库IP,从库IP'),
// 数据库名
'database' => env('database.database', '库名,库名'),
// 用户名
'username' => env('database.username', '主库用户名,从库库用户名'),
// 密码
'password' => env('database.password', '主库密码,从库库密码'),
// 端口
'hostport' => env('database.hostport', '主库端口号,从库端口号'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 1,
// 数据库读写是否分离 主从式有效
'rw_separate' => true,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '2',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
// 更多的数据库配置信息
],
];
Laravel读写分离
laravel 主从复制database配置中
'mysql' => [
//从库
'read' => [
[
'host' => '从库IP',
'username'=>'账户',
'password'=>'密码',
]
],
//主库
'write' => [
'host' => '主库IP',
'username'=>'账户',
'password'=>'密码',
],
'sticky' => true,
'driver' => 'mysql',
'database' => 'renting',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
*不要忽略细节 细节决定成败