1、 准备工作
l CentOS 操作系统, IP:192.168.47.129
l CentOS 操作系统, IP:192.168.47.130
在以上两台CentOS操作系统中安装MySQL数据库
2、 读写分离原理
MySQL要做到主从复制,其实依靠的是二进制日志。
举例:假设主服务器叫A,从服务器叫B;主从复制就是B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改(Insert、Delete、Update)的动作,全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。
扩展:MySQL还有一种日志叫做:慢日志
可以设置一个时间,那么所有执行时间超过这个时间的SQL都会被记录下来。这样就可以通过慢日志快速的找到网站中SQL的瓶颈来进行优化。
3、 配置MySQL主从
2.1 配置主MySQL Master
主 MySQL 配置 |
|
1 |
修改主MySQL my.cnf文件或my.ini #vi /etc/my.cnf
binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed server-id=129 //[必须]服务器唯一ID,默认是1,一般取IP最后一段 |
2 |
配置完成 :wq 保存 重启MySQL服务: # service mysqld restart |
3 |
在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。 mysql> GRANT replication slave ON *.* TO 'slave_1'@'%' identified by '123456';
|
4 |
查询配置状态 mysql> show master status;
|
2.2 配置从MySQL Slave
配置从MySQL Slave |
||
1 |
修改从MySQL my.cnf文件或my.ini #vi /etc/my.cnf
log-bin=mysql-bin //[不是必须]启用二进制日志 binlog_do_db=test //同步的数据库 server-id=130 |
说明: # 不同步哪些数据库 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步 binlog-do-db = game |
2 |
配置完成 :wq 保存 重启MySQL服务: # service mysqld restart |
|
3 |
关闭slave(一定要先关闭) 命令: mysql>stop slave; |
|
4 |
开始配置 mysql>change master to master_host='192.168.33.12', master_user='slave_1', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=154; 参数解释:MASTER_HOST : 设置要连接的主服务器的ip地址 MASTER_USER : 设置要连接的主服务器的用户名 MASTER_PASSWORD : 设置要连接的主服务器的密码 MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息 MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败) |
|
5 |
启动slave同步 mysql>start slave; |
|
6 |
检查从服务器复制功能状态 mysql> show slave status;
|
|
7 |
创建一个只读帐号 |
注:
每次重启主数据库都需要重新获取master_log_file和master_log_pos 。
在主机中show master slave\G; 在从机里面stop slave;
在从机里面change master to master_log_file='上面图中第一个红色圈的值',master_log_pos=第二个红色圈的值;
在从机里面start slave;
Tsaitop:
函数或触发器需要加配置:log_bin_trust_function_creators=1
事件计划需要加配置:event_scheduler=1
Tsaitop:
函数事件在主数据库加就可用,从数据库不用加。
其实根本不需要去操作从库,因为在主库创建函数或触发器都会同步到从库。