读写分离及主从复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读写分离及主从复制相关的知识,希望对你有一定的参考价值。
一、主从复制要求:
a) 至少有两个服务器
b) 分别设置主服务器和从服务器
c) 对主服务器有任何操作都会同步到从服务器上
二、实现原理:
a) mysql中有一个日志bin日志(也叫二进制日志),此日志记录了所有操作数据库的的sql语句
b) 主从复制原理实际上是多台服务器都开启了bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取此bin日志,把该日志内容保存到自己日志中去,从服务器并将记录的sql语句执行一遍,这样主服务器与从服务器的数据就同步了。
c) 实现的技术:用户的授权,log_bin日志的开启
d) 问题:如何解决主从同步过程中的延迟问题?
e) 答:在主从同步过程中添加一个缓存服务器,把刚更新的数据暂时保存在缓存服务器中
三、log_bin日志
a) 如何开启log_bin日志:
- 打开my.ini的配置文件
- Linux在my.cnf配置文件进行配置
b) 如何查看log_bin日志的内容
- 使用一个命令
- Mysqlbinlog -no-defaults 日志文件名和路径
a) Log_bin日志的一些命令操作
- 前提:数据MySQL相关命令
- Flush logs产生一个新的log_bin日志
- Reset master;清空以前的log_bin日志,并产生一个新的log_bin日志
- Show master status;查看最新的log_bin日志,包括最新的POS位置
b) 使用log_bin日志完成一个案例,恢复数据的一个案例
- 步骤 新建一张表
- Create table test(id int);
- Flush logs产生一个新的log_bin日志文件
- Insert into test values(100);
- Insert into test values(200);
- Insert into test values(300);
- Flush logs产生一个新的log_bin日志
- Delete from test
- 要求恢复数据
- 比如一家公司,在上午十点备份了一次数据,到十点半时,由于员工的误操作,把所有数据都删除了,要求回复到十点半
- 思路:打开log_bin日志,进行分析,查找insert和POS的位置,根据POS的位置来回复数据
- 第一步:查看当前日志信息
- 第二步:查看操作sql位置
- 第三步:使用一下命令还原
- Mysqlbinlog -no-default 日志文件 -start-pos=”开始pos点”-stop-pos=”结束pos点” |Mysql -uroot -proot test
三、主从配置
说明:在同步之前,要同步的数据库在两个数据库服务器中必须都存在,两个数据库应该一致。开启主从同步后,主服务器的写操作都会同步到从服务器中
a) 配置主服务器:
- 主和从服务器都要开启log_bin日志,每台服务器设置一个唯一的server-id的值。并重启服务器
- 主服务器:47.93.58.95
- 要给从服务器授权一个用户,该用户授权复制
- 要查看主服务器里面log_bin日志和pos的位置(停止对主服务器的操作,暂时不往里面做更新操作)
- Show master status
b) 配置从服务器
- 从服务器ip:47.93.58.96
- 执行stop slave停止从服务器
- Stop slave
- 具体的配置
a) Change master to master_host=”主服务器的ip”,master_user=”授权的用户名”,master_password=”授权的密码”,master_log_file=’log_bin 日志文件的名称’,master_log_pos=”pos位置”;
b)
- 开启从服务器start slave
a) Start salve
b)
c) 查询从服务器状态
- show slave status
- Slave_IO_Running:Yes
- 此进程负责从服务器从主服务器上读取binlog日志,并写入从服务器的中继日志
- Slave_SQL_Running:Yes
- 此进程负责读取并且执行中继日志中的binlog日志
a) 注:以上两个都为yes则表名成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从“last_error”字段中的值看到
- 演示结果:
a) 主服务器插入数据,可以在从服务器上同步
b) 主服务器
c)
d) 从服务器
e)
c) 如何撤销从服务器
- Stop slave
- Reset slave all
- 从服务器
- 主服务器
四、读写分离的实现
a) 在层次进行设计
b) Class mysql{
$dbm = 主服务器
$dbs1= 从服务器
$dbs2= 从服务器
Public function query(){
在query里面进行语句判断,分析链接不同的mysql服务器
如果是查询则随机链接两台从服务器,如果是修改操作,则连接主服务器
}
}
c)
d)
e)
f) Tp框架支持读写分离:
- ‘DB_DEPLOY_TYPE’ => 1 //分布式数据库支持
- ‘DB_TYPE’ => ’mysqli’ ,//数据库类型
- ‘DB_HOST’ => ’localhost,192.168.3.250’,//服务器地址
- ‘DB_NAME’ => ’php’,//数据库名
- ‘DB_USER’ => ’root’,//用户名
- ‘DB_PWD’ => ’root’//密码
- ‘DB_PORT’ => ’3306’,//端口
- ‘DB_PREFIX’ => ’’,
- ‘DB_RW_SEPARATE’ => true,//支持读写分离
g)
五、说明:
a) 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式
以上是关于读写分离及主从复制的主要内容,如果未能解决你的问题,请参考以下文章