Blogger Information
Blog 11
fans 0
comment 0
visits 8181
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Mysql主从复制
一个人流浪
Original
861 people have browsed it

参考文档:http://blog.csdn.net/goustzhu/article/details/9339621   主从、主主、半同步复制

          http://database.51cto.com/art/201505/475376_all.htm  集群

一、什么是主从复制

 

至少两台数据库服务器,可以分别设置主服务器和从服务器,对主服务器的任何操作(更新)都会同步到从服务器上

图片35.png

二、实现原理

mysql中有一种日志,叫做bin日志(二进制日志),会记录下所有修改过数据库的sql语句。主从复制的原理实际是多台服务器都开启bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取这个bin日志,把该日志的内容保存到自己中继日志里面,从服务器再把中继日志中记录的sql语句同样的执行一遍。这样从服务器上的数据就和

主服务器相同了。

图片36.png图片37.png图片38.png

实现的技术是:用户的授权,和log-bin日志的开启。

 

问题:如何解决主从同步过程中的延迟问题?

解答:可以在主从同步的过程中加一家缓存服务器,把刚更新的数据暂时保存在缓存服务器中。

三、log-bin日志

1、如何开启log-bin日志

打开my.ini的配置文件

图片39.png图片40.png


Linux在 my.cnf配置文件中进行配置

图片41.png

2、如何 查看log-bin日志里面的内容。

使用一个命令,

mysqlbinlog  --no-defaults 日志的文件名及路径

图片42.png

3、log-bin日志相关的一些命令操作

前提:数据mysql相关的命令

flush logs 产生一个新的log-bin日志

图片43.png图片44.png

reset master :清空以前的log-bin日志,并产生一个新的log-bin日志

show master status; 查看最新的一个log-bin日志,包括最新的pos位置。

图片45.png

4、使用bin-log日志完成一个案例,恢复数据的一个案例

步骤:

(1)新建一张表

create table nihao(id int);

(2)flush logs 产生一个新的log-bin日志文件

insert into nihao values(1000);
insert into nihao values(2000);
insert into nihao values(3000);

(3)flush logs产生一个新的log-bin日志文件。

(4)delete from nihao

(5)要求恢复数据

比如一个家公司,在上午9:00备份了一次数据。到9:30时,由于员工的误操作,则把所有的数据都给删除了。要求要恢复数据到9:30.

思路:打开log-bin日志文件,进行分析。查找insert语句的pos位置。根据pos位置来恢复数据

  第一步,查看当前记录日志文件的信息

图片46.png

第二步,查看操作的SQL语句的位置

图片47.png

第三步,使用以下命令进行还原

 mysqlbinlog   --no-defaults 日志文件 --start-pos=”开始的pos点” --stop-pos=’结束的pos点’
  |  mysql  -uroot  -proot  test

图片48.png图片49.png

四、主从配置

说明:在同步前,要同步的数据库在两个数据库服务器中都必须存在,两个数据库应该保持一致。开启主从同步后,主服务器的写操作都会同步到从服务器中。

图片50.png图片51.png图片52.png


1、配置主服务器:

(1)主和从服务器都要开启log-bin日志,每台服务器设置一个唯一的server-id的值。并重启服务器。

主服务器:IP 192.168.1.114

图片53.png

(2)要给从服务器授权一个用户,该用户授予复制权限。

图片54.png

(3)要查看主服务器里面log-bin日志的名字和pos位置。(停止对主服务器的操作,暂时不往里面做更新操作)

show master status;

图片55.png

2、配置从服务器

从服务器:IP  192.168.1.252

图片56.png

(1)执行stop slave停止从服务器: 

   stop slave

图片57.png

(2)具体的配置:

change master to master_host=’主服务器的ip’,master_user=’授权的用户名’,master_password=”授权的密码”,master_log_file=’log-bin日志文件的名称’,master_log_pos=pos位置;

图片58.png

(3)开启从服务器

start slave

图片59.png

(4)查看从服务器的状态:

show slave status;

图片60.png

Slave_IO_Running:Yes

此进程负责从服务器从主服务器上读取binlog 日志,并写入从服务器上的中继日志。 

Slave_SQL_Running:Yes

此进程负责读取并且执行中继日志中的binlog日志, 

注:以上两个都为yes则表明成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从”last_error”字段的值中看到。

 

演示效果:

  主服务器插入数据,可以在从服务器上同步 

    主服务器

图片61.png

从服务器

图片62.png

3、如何撤销从服务器

(1)stop slave
(2)reset slave all

  从服务器

图片63.png

 主服务器

图片64.png

六、读写分离实现

在程序层次进行设计

class  mysql{
$dbm=主服务器 
$dbs1=从服务器 
$dbs2=从服务器 
public function query(){
   //在query里面进行语句判断,分析连接不同的mysql服务器。 
如果是查询则随机连接两台从服务器,如果是修改操作,则连接主服务器
}
}

图片65.png图片66.png图片67.png

tp框架支持读写分离;

   'DB_DEPLOY_TYPE'=>1,//分布式数据库支持
    'DB_TYPE'               => 'mysql',     // 数据库类型
    'DB_HOST'               => 'localhost,192.168.3.250', // 服务器地址
    'DB_NAME'               => 'php,php',          // 数据库名
    'DB_USER'               => 'root,xiaogang',      // 用户名
    'DB_PWD'                => 'root,1234',          // 密码
    'DB_PORT'               => '3306',        // 端口
    'DB_PREFIX'             => '',
    'DB_RW_SEPARATE'=>true,//支持读写分离

图片68.png

 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post