Mysql如何实现双向互为redis主从复制制

MySQL 5.5 主从双向同步_数据库技术_Linux公社-Linux系统门户网站
你好,游客
MySQL 5.5 主从双向同步
来源:Linux社区&
作者:luxiaok
在 Enterprise Linux平台,利用MySQL主从同步原理,实现MySQL双向同步MySQL版本:5.5.28操作系统:RHEL 5.8 32bitServer1:192.168.1.1配置:my.cnf
server-id = 1
binlog-do-db = testdb
binlog-ignore-db = mysql
log-slave-updates
replicate-do-db = testdb
replicate-ignore-db = mysql
同步testdb数据库,这里不对mysql数据库进行同步新增同步用户:
grant replication slave on *.* to slaveuser@192.168.1.2 identified by '123456';
启动Sever1;
service mysql start
查看MySQL同步binlog文件名以及pos值:
Server2:192.168.1.2配置:my.cnf
server-id = 2
binlog-do-db = testdb
binlog-ignore-db = mysql
log-slave-updates
replicate-do-db = testdb
replicate-ignore-db = mysql
与Sever1配置基本相同,只是server-id不同,而且不能相同,另外记得在[mysqld]配置区域里配置开启二进制日志记录:log-bin = mysql-bin新增同步用户:
grant replication slave on *.* to slaveuser@192.168.1.1 identified by '123456';
启动Server2:
service mysql start
配置同步:
mysqlchange master to master_host='192.168.1.1',
mysqlmaster_user='slaveuser',
mysqlmaster_password='123456',
mysqlmaster_log_file='mysql-bin.000020',
mysqlmaster_log_pos=107;
mysqlshow slave status\G;
相关资讯 & & &
& (12/07/:37)
& (11/26/:39)
& (03月31日)
& (11/30/:37)
& (11/11/:54)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款博客分类:
Mysql的主从同步(新数据库)
数据库同步复制功能的设置都是在mysql的配置文件(liunx 下是为/etc/my.cnf)中体现的。主要工作原理为slave端记录并且执行master端的操作日志。
分别登录master机和slave机的mysql:mysql –u root –p
创建数据库:
1、设置同步master
编辑配置文件 /etc/my.cnf 确保有如下行
server-id=1
binlog-do-db=repl& //需要备份的数据库名,如果需要备份多个数据库,重复设置这个选项即可。
log-bin=mysql-bin&&&&&& //启动二进制日志系统
以下的几个参数可以不加:
log-err=my-err.log&&&&
log-bin=mysql-bin&&&&&& //启动二进制日志系统
binlog-ignore-db=mysql& //不需要备份的数据库名,防止备份出错,可以把不备份的数据库写入这个参数中
log-slave-updates&&&&& //这个参数是把更新的记录写到二进制文件中
slave-skip-errors&&&&& //跳过错误,继续执行复制操作
创建一个mysql的账号为同步专用
mysql –u root –p
mysql& grant replication slave on *.* to 'gl'@'192.168.10.Slave' identified by '123456';
#grant replication slave on *.* to ‘用户名’@'主机’ identified by ‘密码’;
mysql&&&&& #刷新权限
重启master mysql
查看master状态
mysql&
查看进程:
mysql&
3、设置同步slave
编辑配置文件
server-id=2
master-user=gl&&&&&&&&&&&&&&& //同步账号
master-host=192.168.10.master //同步masterIP
master-password=123456&&&&&&& //同步密码
master-connect-retry=60&&&&&& //心跳时间(库同步间隔)
master-port=3306&&&&&&&&&&&&& //master数据库的端口
replicate-do-db=repl&&&&&&&&& //同步的数据库名
然后重启slave mysql
在slave机中进入mysql
mysql&
mysql&show slave status\G;
如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功。
查看slave状态
mysql&
查看进程:
mysql&
我在第一次配的时候出现错误,查看日志为
error got fatal error:1236 binary log is not open from master where reading data from binary log
后来查找后知道为没有设置log-bin
即在master中my.cnf中设置log-bin=mysql-bin&&&&&& //启动二进制日志系统
mysql的主从同步(数据库已经运行一段时间)
1、设置同步master&& #同上
2、创建一个mysql账号为同步账号
3、给主服务器所有表加锁,禁止继续写入数据
mysql&FLUSH TABLES WITH READ LOCK;
&&&&&&& mysql& ???? ???????? //记录复制启动断点,也可以使用 show master status\G
&&&&&&& mysql&
&&&&&&& +------------------+----------+--------------+------------------+
&&&&&&& | File&&&&&&&&&&&& | Position | Binlog_Do_DB | Binlog_Ignore_DB |
&&&&&&& +------------------+----------+--------------+------------------+
&&&&&&& | mysql-bin.000003 |&&&&& 106 | backup&&&&&& |&&&&&&&&&&&&&&&&& |
&&&&&&& +------------------+----------+--------------+------------------+
&&&&&&& //记录File: mysql-bin.000003 偏移量 Position 106
4、打包备份主服务器数据文件
& cd /var/lib/mysql
& tat –cvf& repl.tar repl& //打包需要备份的数据库
& scp repl.tar 192.168.10.204:/var/lib/mysql? //将打包后的数据库传到备份服务器
5、主服务器表解锁
执行以下命令,解开主服务器的读锁,主服务器可以继续更新数据:
mysql& UNLOCK TABLES;
6、设置同步slave&& //同上3
7、在从服务器上恢复主备份文件
cd /var/lib/mysql
tar –xvf repl.tar&
8、在从服务器mysql命令符下实现同步
若是查看不能正常同步时,需进行如下操作:
&&&&&&& mysql&mysql& change master to
mysql& master_host='10.10.0.244',
mysql& master_user='backup',
mysql& master_password='123456',
mysql& master_log_file='mysql-bin.000003',&&&&&&& //主服务上的file&&&&&
mysql& master_log_pos=106;&&&&&&&&&&&&&&&&&&&&&&& //主服务器上的pos
用show slave status\G;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步
往表里面写点数据测试一下看是否同步成功。
mysql的双向同步
&&& 配置双向同步方法就是在单向同步的基础上略加改动,即在从机上做主机配置,在主机上做从机配置。
在master上做从机配置
在配置文件中添加
master-host=192.168.10.204
master-user=gl
master-password=
master-port=3306
master-connect-retry=60
replicate-do-db=repl
#service mysql restart& 重启mysql
在slave上做主机配置
在配置文件中添加
binlog-do-db=repl
log_err=my-err.log
创建同步账号
mysql& grant replication slave on *.* to 'gl'@'192.168.10.237' identified by '';
mysql&
在master上测试同步账号& mysql -h 192.168.10.204 -u gl -p
查看同步状态
在master上查看
mysql&
mysql&
ERROR 1200 (HY000): The server is not fix in config file or with CHANGE MASTER TO
mysql&
Empty set (0.00 sec)
此时master上slave不能启动,需要进行如下操作
查看slave上的master状态
mysql&
+------------------+----------+--------------+------------------+
| File&&&&&&&&&&&& | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |&&&&& 106 | backup&&&&&& |&&&&&&&&&&&&&&&&& |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在master上添加 change master to
mysql& change master to master_host='10.10.0.247', master_user='backup', master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=106;
Query OK, 0 rows affected (0.02 sec)
mysql&
Query OK, 0 rows affected (0.00 sec)
查看master的 slave状态
Slave_IO_Running: Yes& Slave_SQL_Running: Yes&& //此时正常
(出现error 1200的错误也可修改数据库下的master.info文件
/usr/local/mysql/data # vim master.info
mysql-bin.000004&&&&&&&&& //master_log_file
204&&&&&&&&&&&&&&&&&&&&& //master_log_pos
10.10.0.247&&&&&&&&&&&&&& //master_host
Backup&&&&&&&&&&&&&&&&& //master_user
123456&&&&&&&&&&&&&&&&& //master_password
3306&&&&&&&&&&&&&&&&&&& //master-port
60&&&&&&&&&&&&&&&&&&&&& master_connect_retry
0&&&&&&&&&&&&&&&&&&&& )
浏览 12711
浏览: 105482 次
来自: 北京
不一闪而过,在 .bat 文件最后面再加入一行代码
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客访问: 8211958
博文数量: 1295
博客积分: 13501
博客等级: 上将
技术积分: 17966
注册时间:
分类: Mysql/postgreSQL 10:33:21
原文地址: 作者:
最近项目上线出了点问题呢,关于跨机房数据同步的问题,
原来的方案是mysql互为主从复制数据,后来被客户的运维严肃拒绝了,现在正在公关中,
互为主从跨机房同步数据网上也都说不靠谱但是根本原因没找到,我觉得如果bin-log中的position
位置能够在闪断,或者长时间宕机的情况下自己追平,解决数据不一致问题的话,我觉得对方
不同意的就是数据安全问题了,同样都是北京机房,客户足够有钱可以假设专线解决安全问
题(都是X京的机房,距离问题可以免谈),或者VPN链路。但是这些都不在项目预期之内,毕竟才
100多W的项目,所以现在正在考虑软件解决方案,网上无意间看到一篇文章,感觉挺靠谱!
文章贴出来,这是一个模仿mysql主从复制的一个软件解决方案,http://agapple.iteye.com/blog/1796633
先吃饭!!!
21:32分,终于又可以开始写了,先不管什么软件解决方案,先把正常mysql主-主复制标杆的内容先写好:
mysql主主复制,其实就是互为主从,参考我上一篇文章,在mysql的从服务器上建立好复制用户,在主服务器上同样
change master to xxxx 然后start slave就可以了。下面还是详细的重新说一遍再增加点内容,先把上一篇的主从复制过来。
目前情况是,两台服务器分别为:192.168.157.11,192.168.157.13
虚拟机软件情况为:CentOS 6.4 ,mysql-5.5
mysql安装过程详见:http://blog.chinaunix.net/uid--id-3846967.html
好现在开始进行配置,方便起见下面两台机器同时操作,大家不要看混乱哦!混乱的地方我会用服务器IP标识出来!
(1)首先确认两台机器上的mysql版本,版本最好一致,mysql升级后,bin-log会有更改。
即使两台机器上的mysql版本不一致也需要Slave的版本高于Master,而我们现在是双主同步,一定要一致哦!
(2)在192.168.157.13上首先建立同步所用的帐号:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.157.11' IDENTIFIED BY '111111';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges
在192.168.157.11 同样建立同步帐号:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.157.13' IDENTIFIED BY '111111';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges
这里帐号密码都一样,方便管理。
(3)修改192.168.157.13数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务。
log-bin=mysql-bin
server-id=1
binlog-do-db = test
binlog-ignore-db=mysql
修改192.168.157.11数据库的配置文件my.cnf
log-bin=mysql-bin
server-id=2
binlog-do-db = test
binlog-ignore-db=mysql
(4)分别获得服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
192.168.157.13的:
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000006
Position: 1249
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
192.168.157.11的:
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000008
Position: 338
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
(5)停止对主库的更新操作,并将192.168.157.13数据库文件导出一份,并且导入到192.168.157.11中(这里随意了!!)
#首先添加一个读锁保证数据库的一致性
mysql> flush tables with read lock;
mysql> quit;
mysqldump -uroot -p -P 3306 test > /usr/local/mysql/test.sql
#然后将test.sql传到Slave机器上,并且导入。这里要求从库必须是启动的。
mysql> -uroot -p --default-character-set=utf8 test < test.sql
#最后恢复Master机器的读锁
mysql> unlock tables
(6)配置从服务器
在192.168.157.11上执行:
mysql>change master to master_host='192.168.157.13',master_user='slave',master_password='111111',master_log_file='mysql-bin.000006',master_log_pos=338; //注意不要断开,“338”无单引号
start slave;#启动slave进程
在192.168.157.13上执行:
mysql>change master to master_host='192.168.157.11',master_user='slave',master_password='111111',master_log_file='mysql-bin.000008',master_log_pos=338; //注意不要断开,“338”无单引号
start slave;#启动slave进程
(7)分别执行show salve status验证主从配置是否生效
mysql> show slave status\G;
*************************** 1. row ***************************
&&&&&&&&&&&&&&&Slave_IO_State: Waiting for master to send event
&&&&&&&&&&&&&&&&&&Master_Host: 192.168.157.13
&&&&&&&&&&&&&&&&&&Master_User: slave
&&&&&&&&&&&&&&&&&&Master_Port: 3306
&&&&&&&&&&&&&&&&Connect_Retry: 60
&&&&&&&&&&&&&&Master_Log_File: mysql-bin.000008
&&&&&&&&&&Read_Master_Log_Pos: 834
&&&&&&&&&&&&&&&Relay_Log_File: lvstest-relay-bin.000004
&&&&&&&&&&&&&&&&Relay_Log_Pos: 980
&&&&&&&&Relay_Master_Log_File: mysql-bin.000008
&&&&&&&&&&&&&Slave_IO_Running: Yes
&&&&&&&&&&&&Slave_SQL_Running: Yes
&&&&&&&&&&&&&&Replicate_Do_DB:
&&&&&&&&&&Replicate_Ignore_DB:
&&&&&&&&&&&Replicate_Do_Table:
&&&&&&&Replicate_Ignore_Table:
&&&&&&Replicate_Wild_Do_Table:
&&Replicate_Wild_Ignore_Table:
&&&&&&&&&&&&&&&&&&&Last_Errno: 0
&&&&&&&&&&&&&&&&&&&Last_Error:
&&&&&&&&&&&&&&&&&Skip_Counter: 0
&&&&&&&&&&Exec_Master_Log_Pos: 834
&&&&&&&&&&&&&&Relay_Log_Space: 1284
&&&&&&&&&&&&&&Until_Condition: None
&&&&&&&&&&&&&&&Until_Log_File:
&&&&&&&&&&&&&&&&Until_Log_Pos: 0
&&&&&&&&&&&Master_SSL_Allowed: No
&&&&&&&&&&&Master_SSL_CA_File:
&&&&&&&&&&&Master_SSL_CA_Path:
&&&&&&&&&&&&&&Master_SSL_Cert:
&&&&&&&&&&&&Master_SSL_Cipher:
&&&&&&&&&&&&&&&Master_SSL_Key:
&&&&&&&&Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
&&&&&&&&&&&&&&&&Last_IO_Errno: 0
&&&&&&&&&&&&&&&&Last_IO_Error:
&&&&&&&&&&&&&&&Last_SQL_Errno: 0
&&&&&&&&&&&&&&&Last_SQL_Error:
&&Replicate_Ignore_Server_Ids:
&&&&&&&&&&&&&Master_Server_Id: 1
1 row in set (0.00 sec)
主要看这两项:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都显示如上,说明配置成功,会主从之后,主主其实很简单,然后在11上建个表,在13上马上就看到了哦,在13中插入数据,在11上也能看到,这样主主配置成功!
阅读(1740) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。扫一扫体验手机阅读
mysql 之 主从同步(单向同步和双向同步)
<span type="1" blog_id="1744390" userid='
86篇文章,18W+人气,3粉丝
前百度高级工程师的架构高可用实战
¥51.00219人订阅
<span type="1" blog_id="1744390" userid='扫一扫体验手机阅读
mysql dba系统学习(18)mysql主从复制的实现
9,排错Slave_SQL_Running:Nomysql&showslavestatus\GSlave_IO_Running:YesSlave_SQL_Running:NoLast_Errno:1062....Seconds_Behind_Master:NULL原因:1.程序可能在slave上进行了写操作2.也可能是slave机器重起后,事务回滚造成的.解决办法I:1.首先停掉Slave服务:slavestop2.到主服务器上查看主机状态:记录File和Position对应的值。mysql&+------------------+-----------+--------------+------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+------------------+-----------+--------------+------------------+|mysql-bin.617781|||+------------------+-----------+--------------+------------------+1rowinset(0.00sec)3.到slave服务器上执行手动同步:mysql&changemasterto&master_host='192.168.46.131',&master_user='chenzhongyang',&master_password='chenzhongyang',&master_port=3306,&master_log_file='mysql-bin.000020',&master_log_pos=;1rowinset(0.00sec)mysql&1rowinset(0.00sec)再次查看slave状态发现:Slave_IO_Running:YesSlave_SQL_Running:Yes...Seconds_Behind_Master:0
<span type="1" blog_id="1290938" userid='
114篇文章,45W+人气,0粉丝
前百度高级工程师的架构高可用实战
¥51.00219人订阅
<span type="1" blog_id="1290938" userid='

我要回帖

更多关于 oracle实现主从复制 的文章

 

随机推荐