MySql读写分离|数据库主从分离 |PHP分布式 |mysql的数据同步配置

单行、唯一 0     2045      数据库   1     1
目的:实现服务器负载均衡、通过复制实现数据的异地备份、提高数据库系统的可用性、主从同步

一、准备环境:


Linux CentOS 7  

主服务器master(192.168.31.222):写入数据库做在的服务器

从服务器slave(192.168.31.223):读取数据库所在的服务器
数据库:MySql 两台服务器数据库版本一致【测试:mysql5.6】   端口都是3306


二、在主库(master)和从库(slave)分别新建项目的同一个数据库wyctocn并导入数据;

先测试下单数据库是否能正常访问  


三、主数据库master配置


1.打开mysql配置文件,找到   [mysqld] 的位置

编辑下面的配置:

server-id = 1 # 节点ID,确保唯一

# log config
log-bin = mysql-bin #开启mysql的binlog日志功能
sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 100m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大

最后两个不设置就是同步所有


2.创建主从账户并给与权限:

CREATE USER slave IDENTIFIED BY 'slave123';
grant replication slave on *.* to 'slave '@'192.168.31.223'  identified by 'slave123';


3.刷新:

FLUSH PRIVILEGES;


4.查看master的状态:show master status;

记住两个值

File :mysql-bin.000007

Position:4968 


5.重启数据库加载配置


四、配置从数据库


1.打开配置文件,如下配置
server-id = 2        # 节点ID,确保唯一

# log config
log-bin = mysql-bin     #开启mysql的binlog日志功能
sync_binlog = 1         #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小
binlog_cache_size = 4m                        #binlog缓存大小
max_binlog_cache_size= 512m              #最大binlog缓存大


2.进入数据库,执行下面语句:

stop slave;
change master to
master_host='192.168.31.222',
master_user='slave',
master_password='slave123',
master_port=3306, master_log_file='mysql-bin.000007', master_log_pos=4968;
start slave;
master_log_file='mysql-bin.000007',#主库状态里面的File

master_log_pos=4968;  #主库状态里面的Position


3.执行下面语句看结果:

show slave status

看这几项是否成功

lave_IO_Running: Yes

Slave_SQL_Running: Yes

Master_Log_File: mysql-bin.000023

Relay_Master_Log_File: mysql-bin.000023

Read_Master_Log_Pos: 2720

Exec_master_log_pos: 2720



五、大功告成,去体验测试吧


1.测试框架Thinkphp,配置数据库:

return [
    // 数据库类型
    'type'           => 'mysql',
    // 服务器地址
    'hostname'       => '192.168.31.222,192.168.31.223',
    // 数据库名
    'database'       => 'wyctocn',
    // 用户名
    'username'       => 'wyctocn',
    // 密码
    'password'       => 'www.wycto.cn',
    // 端口
    'hostport'       => '',
    // 连接dsn
    'dsn'            => '',
    // 数据库连接参数
    'params'         => [],
    // 数据库编码默认采用utf8
    'charset'        => 'utf8mb4',
    // 数据库表前缀
    'prefix'         => 'cto_',
    // 数据库调试模式
    'debug'          => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'         => 1,
    // 数据库读写是否分离 主从式有效
    'rw_separate'    => true,
    // 读写分离后 主服务器数量
    'master_num'     => 1,
    // 指定从服务器序号
    'slave_no'       => '',
    // 是否严格检查字段是否存在
    'fields_strict'  => true,
    // 数据集返回类型 array 数组 collection Collection对象
    'resultset_type' => 'array',
    // 是否自动写入时间戳字段
    'auto_timestamp' => false,
    //如果不希望自动格式化输出
    'datetime_format' => false,
    // 是否需要进行SQL性能分析
    'sql_explain'    => false,
];


2.打开主库和从库的数据库对照,然后在主库插入或者更新一条数据,看从库是否有变化,有变化且数据一致就成功;


3.使用Thinkphp项目进行修改写入,查看数据是否变化


4.单独修改从数据库信息,使用Thinkphp查看是否是修改的信息,如果是证明读取的是从数据库;


好了,就到这里了,祝你用的愉快



captcha
忘记密码? 注册
第三方登录
微信赞赏
支付宝赞赏