mysql数据库主主同步方案.docx
- 文档编号:30266015
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:6
- 大小:18.14KB
mysql数据库主主同步方案.docx
《mysql数据库主主同步方案.docx》由会员分享,可在线阅读,更多相关《mysql数据库主主同步方案.docx(6页珍藏版)》请在冰豆网上搜索。
mysql数据库主主同步方案
mysql数据库主主同步方案
Mysql数据库主主(mster-mster)同步方案
一、MySQL同步概述
1.MySQL数据的复制的基本介绍
目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧!
MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。
主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。
这些日志可以记录发送到从服务器的更新。
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。
从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。
否则,你必须要小心,以幸免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
单向复制有利于健壮性、速度和系统治理:
健壮性:
主服务器/从服务器设置增加了健壮性。
主服务器出现问题时,你可以切换到从服务器作为备份。
速度快:
通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。
但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。
如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
系统治理:
使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。
在备份过程中主服务器可以继续处理更新。
2.MySQL数据复制的原理
MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。
因此,要进行复制,必须在主服务器上启用二进制日志。
每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。
认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。
任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。
如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。
将主服务器的数据拷贝到从服务器的一个途径是使用LODDTFROMMSTER语句。
请注意LODDTFROMMSTER目前只在
所有表使用MyISM存储引擎的主服务器上工作。
并且,该语句将获得全局读锁定,因此当表正复制到从服务器上时,不可能在主服务器上进行更新。
当我们执行表的无锁热备份时,则不再需要全局读锁定。
MySQL数据复制的原理图大致如下:
从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现:
其中1个在主服务器上,另两个在从服务器上。
当发出STRTSLVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。
主服务器创建一个线程将二进制日志中的内容发送到从服务器。
该线程可以识别为主服务器上SHOWPROCESSLIST的输出中的BinlogDump线程。
从服务器I/O线程读取主服务器BinlogDump线程发送的内容并将该数据拷贝到从服务器数
据目录中的本地文件中,即中继日志。
第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。
在前面的描述中,每个从服务器有3个线程。
有多个从服务器的主服务器创建为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O和SQL线程。
这样读取和执行语句被分成两个独立的任务。
如果语句执行较慢则语句读取任务没有慢下来。
例如,如果从服务器有一段时间没有运行了,当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程远远滞后。
如果从服务器在SQL线程执行完所有索取的语句前停止,I/O线程至少已经索取了所有内容,以便语句的安全拷贝保存到本地从服务器的中继日志中,供从服务器下次启动时执行。
这样同意清空主服务器上的二进制日志,因为不再需要等候从服务器来索取其内容。
3.主主同步机制
在主从同步的基础上继续完善,把从机当做主机,主机当做从机再按主从同步的方式配置一次就是主主同步。
二、实践
1.安装环境(测试环境)
主数据库(下文叫数据库)
Ip:
192.168.105.54
数据库:
Mysql5.7安装包mysql-instller-community-5.7.9.1.msi系统:
windowserver20XXr2stndrd
主数据库(下文叫数据库B)
Ip:
192.168.105.244
数据库:
Mysql5.7安装包mysql-instller-community-5.7.9.1.msi系统:
windowserver20XXr2stndrd
2.mysql安装配置
B主机下载mysql并安装配置,参考地址如下:
XX:
//.docsj/doc/1ec05c33968011c20XX1e6.html/rticle/17d528535dd808098c8f286.html
注意:
安装完成之后修改安装文件下的my-defult.ini文件为my.ini(此文件为mysql的配置文件)。
mysql环境配置
计算机右键点击‘属性’,系统界面选择‘高级系统设置’,系统属性界面选择‘环境变量配置’,系统属性界面下的系统变量,点击新建按钮
.新建系统变量名称:
MYSQL_HOME,值:
C:
\ProgrmFiles\MySQL\MySQLServer5.7;
b.系统变量选择pth环境变量,编辑pth在其后添加%MYSQL_HOME%\bin;
c.测试mysql
1)启动命令行模式,方式一:
键盘win+r,输入cmd;方式二:
开始按钮查找cmd,点击命令提示符;
2)启动mysql服务,方式一:
命令行输入netstrtmysql;方式二:
windowsserver下启动任务治理器,点击服务栏,找到mysql服务手动开启。
Win7下计算机右键选择‘治理’,点击服务和应用程序,点击服务,找到mysql服务手动开启。
3)命令行,输入命令mysql–uroot–p;提示输入密码,进入mysql,输入quit;退出mysql。
4)关闭mysql服务,方式一:
命令行输入netstopmysql;方式二:
windowsserver下启动任务治理器,点击服务栏,找到mysql服务手动关闭。
Win7下计算机右键选择‘治理’,点击服务和应用程序,点击服务,找到mysql服务手动关闭。
3.B主机配置MysqlServer启动BinryLogging
在的my.ini文件(C:
\ProgrmFiles\MySQL\MySQLServer5.7,默认情况一般在C:
\ProgrmDt\MySql\MySqlServer5.6\my.ini)中添加如下配置信息
[mysqld]
log-bin="C:
\ProgrmDt\MySQL\MySQLServer
5.7_01\log-bin\log-bin.log"
server-id=1
B的my.ini文件中添加如下配置信息
[mysqld]
log-bin="C:
\ProgrmDt\MySQL\MySQLServer
5.7_01\log-bin\log-bin.log"
server-id=2
4.B重启mysql
B为Repliction创建用户User,并给予权限
进入mysql,输入命令
grntreplictionslveon*.*torepl@192.168.105.244identifiedby'repl';
repl分别为用户名和密码,根据自己需要修改。
@后为另外一XX主机的ip地址。
5.查看两XXMysqlServer当前binlog的位置
(因为我们只需要同步两个server从当前状态之后的操作)
5.1分别在两XX机器上执行如下命令:
FLUSHTBLESWITHREDLOCK;
SHOWMSTERSTTUS;
会得到如下结果
B得到的结果:
图中File表示当前的binrylog文件名,Position是表示Binrylog文件的当前位置,呆会repliction应该是从这个位置开始。
6.释放lock
在两XX机器上执行如下命令:
UnlockTbles.让两XXMySql可以正常进行数据库操作。
7.设置SlveRepliction
7.1启动的slverepliction。
7.1.1执行命令stopslve
7.1.2执行如下命令
Chngemstertomster_host='192.168.105.244',mster_user='repl',mster_port=3306,mster_pssword='repl',mster_log_file='log-bin.000008',mster_log_pos=450;
7.1.3执行strtslve
7.1.4查看slve的状态,执行ShowSlveSttus\G;
显示如下:
Slve_io_running和slve_sql_running显示yes,表示正确。
7.2启动B上的slverepliction
7.2.1执行stopslve
7.2.2执行如下命令
chngemstertomster_host='192.168.105.54',mster_user='repl',mster_port=3306,mster_pssword='repl',mster_log_file='log-bin.000006',mster_log_pos=451;
7.2.3执行strtslve
7.2.4查看slve的状态,执行ShowSlveSttus\G;
B显示如下:
Slve_io_running和slve_sql_running显示yes,表示正确。
8.测试repliction效果
8.1在上执行
mysql>cretedtbserepltest;
mysql>userepltest;
mysql>cretetbleperson(idint,nmevrchr(255));mysql>insertintopersonvlues(1,’jensen’);
8.2在B上执行:
mysql>userepltest;
mysql>select*fromperson;验证在上插入的记录已经同步现B上
8.3在B上插入一条记录
insertintopersonvlues(2,’jck’);
8.4上显示
select*fromperson;
9.自增冲突解决方式
对于自增ID列,两XXServer同步时会因为值一样而造成冲突。
解决方案:
利用mysql的uto_increment_increment()和uto_increment_offset来限定每XXserver生成的ID限定在一定范围内(如:
104生成奇数ID,103生成偶数ID)。
uto_increment_offset表示自增长字段从那个数开始,他的取值范围是1..65535
uto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1..65535
在主主同步配置时,需要将两XX服务器的uto_increment_increment增长量都配置为2,而要把uto_increment_offset分别配置为1和2.
命令如下:
mysql>SET@@uto_increment_increment=2;
mysql>SET@@uto_increment_offset=1;
这样才可以幸免两XX服务器同时做更新时自增长字段的值之间发生冲突。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql 数据库 同步 方案
![提示](https://static.bdocx.com/images/bang_tan.gif)