山山未迟

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

image

 

目录

一、什么是主从复制 1

二、实现原理 1

三、用户授权, 2

1、添加一个用户,给用户授权 2

2、如果删除一个用户 3

四、log-bin日志 3

1、如何开启log-bin日志 3

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

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

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

五、主从配置 8

1、配置主服务器: 8

2、配置从服务器 9

3、如何撤销从服务器 10

六、读写分离实现 10

一、什么是主从复制

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

wps26E4.tmp

二、实现原理

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

wps2704.tmp

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

三、用户授权,

1、添加一个用户,给用户授权

查看当前数据库下面的用户情况。

wps2705.tmp

grant 权限名称(select update delete) on 数据库名.表名 to ‘用户名’@’主机’ identified by 密码

wps2716.tmp

例如:说明授权的用户xiaolong只能在192.168.10.120的主机上面登录,只对user库user表执行select update delete操作。

grant  select update delete on user.user to 'xiallong'@'192.168.10.120'  identified by '12345'

2、如果删除一个用户

wps2726.tmp

drop  user ‘用户名’@’主机’

wps2727.tmp

四、log-bin日志

1、如何开启log-bin日志

打开mysql.ini的配置文件

wps2738.tmpwps2739.tmpwps2759.tmp

创建的log-bin日志文件。

wps276A.tmp

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

使用一个命令,

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

wps277B.tmp

wps27BA.tmp

log-bin记录sql语句的格式位置

wps27CB.tmp

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

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

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

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

wps27DB.tmp

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)

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

(4)delete from nihao

wps27ED.tmp(5)要求恢复数据

wps27EE.tmp

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

比如如下:要求恢复数据

wps27FF.tmp

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

使用如下的参数

--start-pos=”开始的pos点”

--stop-pos=’结束的pos点’

wps280F.tmp

wps2810.tmpwps2811.tmpwps2822.tmpwps2823.tmpwps2833.tmp

五、主从配置

1、配置主服务器:

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

wps2844.tmp

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

grant replication slave on *.*  to ‘xiaoming’@’%’ identified by ‘12345’

wps2845.tmp

(3)要查看主服务器里面log-bin日志的名字和pos位置。(停止对主服务器的操作)

show master status;

wps2856.tmp

2、配置从服务器

wps2876.tmp

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

(2)具体的配置:

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

wps2878.tmp

(3)开启从服务器

start slave

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

show slave status;

wps2897.tmp

Slave_IO_Running:Yes

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

Slave_SQL_Running:Yes

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

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

3、如何撤销从服务器

(1)stop slave

(2)reset slave all

wps28A8.tmp

六、读写分离实现

在程序层次进行设计

class  mysql{

$dbm=主服务器

$dbs1=从服务器

$dbs2=从服务器

public function query(){

在query里面进行语句判断,分析连接不同的mysql服务器。

如果是查询则随机连接两台从服务器,如果是修改操作,则连接主服务器

}

}

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,//支持读写分离

验证:

select语句是操作从 服务器

insert 语句是操作的主服务器

wps28B8.tmp

wps28C9.tmp

posted on 2016-05-08 22:37  山山未迟  阅读(192)  评论(0编辑  收藏  举报