热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » Linux编程开发 » Mysql Replication(MySQL复制)

Mysql Replication(MySQL复制)

论坛链接
  • Mysql Replication(MySQL复制)
  • 发布时间:2007-09-09 22:55:03    浏览数:7975    发布者:lupd    设置字体【   
类似于从一台服务器拷贝数据库到另一台服务器上,但它是通过定义Master 和Slave的关系去实时地保证两个数据库的完全同步,这个功能在Mysql的3.23版中开始出现。
Master/Slave模式备份
TestEnv:
Master:Mysql-4.1.12 on Redhat9.0 IP:192.168. 0.217
Slave: Mysql-4.1.12 on Redhat9.0 IP:192.168.10.244
1、编译,安装
1. #tar ?zxvf Mysql-4.1.12.tar.gz
2. #cd Mysql-4.1.12
3. .#/configure ?prefix=/var/eyou/mysql
4. #make
5. #make install
6. #chown ?R root /var/eyou/mysql
7. # chown ?R mysql /var/eyou/mysql/var
8. #chgrp ?R mysql /var/eyou/mysql
9. #scripts/mysql_install_db
10. #cp support-files/my-medium.cnf /etc/my.cnf
2、Master 机器设置权限,赋予Slave机器FILE及Replication Slave权利,并打包要同步的数据库结构。
Master# pwd
/var/eyou/mysql/bin
Master#./mysql ?u root ?p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.12
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> GRANT FILE ON *.* TO [email]rep@192.168.0.244[/email] IDENTIFIED BY ‘eyou’;
mysql> GRANT REPLICATION SLAVE ON *.* TO [email]rep@192.168.0.244[/email] IDENTIFIED BY ‘eyou’;
赋予192.168.10.244也就是Slave 机器有File权限, 这个4.1.12版对replication的权限好像做了调整,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
然后打包要复制的数据库
Master# cd var
Master# tar czvf reptest.tar.gz reptest
这样,我们得到一个reptest数据库的打包文件reptest.tar.gz
2设置主服务器Master的my.cnf,启动Mysql服务
Master# vi /etc/my.cnf
在[mysqld]添加或修改以下的
[mysqld]
log-bin #打开logbin选项以能写到slave的 I/O线程;
server-id=1 #表示是本机的序号为1,一般来讲就是master的意思.
sql-bin-update-same
binlog-do-db= reptest #表示同步reptest数据库;
然后把Master主服务器的Mysql重启。
Master# /var/eyou/mysql/bin/mysqladmin ?u root ?p shutdown
Master# /var/eyou/mysql/bin/safe_mysqld --user=mysql &
3、建立Slave数据库
刚才在Master中打包了reptest.tar.gz,它的作用就是要在Slave恢复成一样的数据库。先把Master 的reptest.tar.gz文件传到Slave机器中去。然后
Slave# tar zxvf reptest.tar.gz -C /var/eyou/mysql/var/
4、修改Slave服务器的my.cnf
Slave# vi /etc/my.cnf
在[mysqld]添加或修改以下的
master-host=192.168.10.217
master-user=rep
master-password=eyou
master-port=3306
server-id=2
master-connect-retry=60
replicate-do-db=reptest    [要更新的数据库]
log-slave-updates
5、删除Slave端数据库目录中的master.info
Slave# rm /var/eyou/mysql/var/master.info
6、重启动Slave的slave start。
Slave# /var/eyou/mysql/bin/mysqladmin ?u root ?p shutdown
Slave# /var/eyou/mysql/bin/safe_mysqld --user=mysql &
7、测试
先检测两个Mysql数据库中的reptest是否正常。
正常情况应该是Master和Slave 中的Mysql 都有相同的reptest 数据库,并且里面的数据都一样。
然后测试replication 功能是否起用。
在Master中的reptest数据库添加一笔数据:
Master# /var/eyou/mysql/bin/mysql ?u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12 to server version: 4.1.12
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use reptest;
Database changed
mysql> INSERT INTO rep_table VALUES ('test1', '4321', 'T',24);
Query OK, 1 row affected (0.00 sec)
mysql>
然后查看Slave机器的reptest数据库:
Slave#/var/eyou/mysql/bin/mysql ?u root ?p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12 to server version: 4.1.12
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use reptest;
Database changed
mysql>select * from reptable;;
+------+------+------+------+
| id | name | sex | age |
+------+------+------+------+
| test1| 4321 | T | 24 |
+------+------+------+------+
1 row in set (0.00 sec)

PS :
1,Slave机器的权限问题,不但要给slave机器File权限,还要给它REPLICATION SLAVE的权限。
2.在修改完Slave机器/etc/my.cnf之后,slave机器的mysql服务启动之前,记得要删除掉master.info
3,在show master status 或着show slave status 不正常时,看看.err是怎样说的。
4,Slave上Mysql的Replication工作有两个线程, I/O thread和SQL thread 。I/O 的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的语句,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var/lib/mysql/relay-log.info.

双向复制模式
1:
Slave 机器设置权限,赋予Master机器FILE及Replication Slave权利.
Master#./var/eyou/mysql ?u root ?p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.12
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> GRANT FILE ON *.* TO [email]rep@192.168.0.217[/email] IDENTIFIED BY ‘eyou’;
mysql> GRANT REPLICATION SLAVE ON *.* TO [email]rep@192.168.0.217[/email] IDENTIFIED BY ‘eyou’;
2:
在原有的master/slave设置基础上做下列修改:
Master# vi /etc/my.cnf
添加:
master-host=192.168.0.244 #表示本机做slave时的master为192.168.0.244;
master-user=rep #这里表示master上开放的一个有权限的用户
master-password=eyou #这个用户的密码
master-connect-retry=60 #
rplicate-do-db=reptest #用来备份的数据库
log-slave-updates
保存退出重起mysql服务
Slave#vi /etc/my.cnf
添加:
binlog-do-db=reptest
sql-bin-update-same
保存退出重起mysql服务
PS :
1,以前Slave机器的server-id不用变
2,重启完mysql服务后,记得看一下slave status,最好slave stop / slave start
本文是在前辈文章的基础上针对4.1.12版本进行的修改,如果有不准确的地方,还望大家斧正。感谢linux世界的开源精神!


在做mysql replication的时候,一定要注意mysql的授权。不同的版本授权方法不一样。如果出现错误,可以从日志里面看到错误原因,并根据提示可以解决问题。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理