mysql数据同步-基于二进制日志文件和position复制点的方式

mysql的binlog日志有三种格式,分别为statement,mixed,以及row。mysql

1.Statement每一条会修改数据的sql都会记录在binlog中sql

优缺点1)不用记录每一行的变化,日志量小(执行update table set column=xx,只需记录一条sql便可);数据库

              2)有些sql语句可能会跟数据库环境有关,好比登陆用户等等数据,致使复制的时候数据出问题。服务器

2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改(默认的数据复制方式,经过show variables like 'binlog_format'命令查看)session

优缺点:1)binlog日志会记录每一行数据修改的细节,不会使用和当前数据库环境相关的数据;架构

              2)日志量较大(如执行update table set column=xx,会记录和表数据数量同样的日志记录ide

3.Mixedlevel: 是以上两种level的混合使用性能

mysql数据复制架构测试

1、主从架构(Master-Slave)编码

优缺点:

1)一台master对应多台slave,数据修改可在master操做,数据查询分别在2台slave中操做,主要用于读操做大于写操做的请状况,可提升数据库的查询性能;

2)若是slave比较多,会严重增长master数据库的压力,由于一台slave连上master时,会开启3个线程(Connection Thread 链接master的线程,IO Thread slave接受master二进制数据的线程, SQL Thread slave处理日志重放的线程);

3)可能会形成单点故障,由于master只有一台,若是master宕机以后,须要从新指定master;

4)slave库的数据会出现延时(延时时间为slave端运行show slave status时,Seconds_Behind_Master选项的值)。

实现步骤:(默认都是新装的机器,数据库中都没有数据)

一、安装3台mysql服务器,一台master,二台slave,master的端口是3307,二台slave的端口分别是330八、3309;

二、安装成功以后,修改master配置my.ini文件(假设master的服务名为mysqlmaster),个人配置以下:

[mysqld]

 innodb_buffer_pool_size = 128M

#启用二进制日志

 log_bin=mysql-bin  

 innodb_flush_log_at_trx_commit=1

 #事物一提交,就必须同步二进制日志,这样会下降性能,可是数据比较重要

 sync_binlog=1 

 #服务器ID不能重复

 server_id=10

 #须要作主从备份的数据库名字

 #binlog-do-db=test_custer

 #只保留7天的二进制日志,以防磁盘被日志占满

 expire-logs-days=7

#mysql的安装目录

 basedir=D:\mysqlcuster\mysqlmaster

#mysql数据存放目录

 datadir=D:\mysqlcuster\mysqlmaster\data

 port=3307

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

#服务端的编码方式

character-set-server=utf8

[client]

port=3307

default-character-set=utf8

三、使用net start mysqlmaster启动master服务器,启动成功以后,登陆mysql,命令为mysql -uroot -p -P3307;

四、在master中建立用于复制的帐号,帐号名、密码、ip可修改:grant replication slave on *.* to repl_user@127.0.0.1 identified by 'repl_password';

五、修改slave的my.ini文件配置,以其中一台slave为例,配置以下:

[mysqld]

 innodb_buffer_pool_size = 128M

 #须要作复制的数据库名

 #replicate-do-db=test_custer

#服务器id

 server_id=2

 #自动跳过的表,session表不必作复制

 #replicate-ignore-table=dzx2.pre_common_session 

 #自动跳过的错误代码,以防复制出错被中断

 #slave-skip-errors=1032,1062,126,1114,1146,1048,1396 

 #避免从库意外崩溃,致使数据重复复制

 sync_master_info=1

 basedir=D:\mysqlcuster\mysqlslave

 datadir=D:\mysqlcuster\mysqlslave\data

 port=3308

 #设置从节点只读,防止从节点写入数据,致使主从数据库数据不一致

 read_only=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

#服务端的编码方式

character-set-server=utf8

[client]

port=3308

default-character-set=utf8

六、使用net start mysqlsalve启动salve服务器,启动成功以后,登陆mysql,命令为mysql -uroot -p -P3308和mysql -uroot -p -P3309

七、在master端输入show master status,获得查询结果file和position;

八、在slave设置master的信息

change master to master_host='master的ip',

master_user='master建立的复制帐号',

master_password='master建立的复制帐号用户名',

master_port=master的数据库端口,

master_log_file='master运行show master status的结果中的file字段值',

master_log_pos=master运行show master status的结果中的position字段值';

九、在slave端运行start slave,以后再运行show slave status\G;若是查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

十、测试。在master中建立test_custer数据库和test表,查看slave数据库也会存在test_custer数据库和test表。


2、主主架构(Master-Master)

master-master模式和master-slave模式差很少,须要在2台master中打开二进制文件,只是master-master模式中,存在2台主机,2台主机都可执行读写操做,这种模式有个缺点就是怎么保证数据完整性,由于2台主机都可执行写操做,可能会存在一部分数据存放在master1,另外一部分数据存放在master2中,若是master1宕机了,整个数据库环境的数据也就不完整了。


3、主从从架构(Master-Slave-Slave)

优势:1)减轻master的复制压力;

          2)master宕机后,slave可充当master角色,可避免单点故障

步骤:(master-slave-slave2,即slave充当slave2实例的master角色)

1)修改master配置文件my.ini,同上;

2)修改slave、slave2配置文件,同上。不过须要在slave服务器配置文件中新加2项配置

 #二进制日志文件

log_bin=myslave-bin

#从服务器从主服务器接收到的更新记入到slave的二进制日志

log_slave_updates=1

3)分别启动master、slave、slave2服务器

4)登陆master服务器,输入show master status;命令,查看file和position字段的值

5)登陆slave服务器,指定master服务器

6)在slave服务器中输入start slave;命令,以后再运行show slave status\G;若是查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

7)在slave服务器中运行show master status,查看file和position字段的值

8)启动slave2服务器,设置slave2服务器对应的主服务器的信息

9)在slave2服务器中输入start slave;命令,以后再运行show slave status\G;若是查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

10)测试。在master上的test表中添加数据,若是master、slave、slave2服务器均有新插入的数据,表示成功

11)中止master服务器,而后在slave服务器中添加数据,若是slave2服务器的数据库中有新添加的数据,表示slave2的主服务器就是slave服务器

相关文章
相关标签/搜索