Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1212948
  • 博文数量: 116
  • 博客积分: 2889
  • 博客等级: 少校
  • 技术积分: 1337
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 09:35
个人简介

IT运维工程师、律师 IT相关技术支持、法律咨询

文章分类

全部博文(116)

文章存档

2015年(1)

2014年(2)

2013年(5)

2012年(12)

2011年(4)

2010年(12)

2009年(21)

2008年(37)

2007年(22)

分类: LINUX

2010-10-13 16:07:11

唱宇 2010-10-13 北京

最近测试了mysql主从复制的实现,现在记录一下;因为网上有些文章的mysql版本较老,有些参数已经不适合了。

确保 Master 与 Slave 之间的数据一致

[Master Server 方面]

设定 Server-id

开启 Binary Log

设定 Replication Slave 权限

[Slave Server 方面]

设定 Server-id

将 Master_Host 设定为 Master Server

启动与检查 Slave Server 的状态

在此范例中我们假设:

[Master Server]

IP 为 192.168.1.1

server-id 为 1

进行数据同步时所使用的帐户信息:

账号: slave_server

密码: 1234

[Slave Server]

IP 为 192.168.1.2

server-id 为 2




我的环境,主机是LINUX ,客户端是WIN7 。
主机的MYSQL版本:


[root@wxserver2 data]# /usr/local/mysql/bin/mysql --version
/usr/local/mysql/bin/mysql Ver 14.12 Distrib 5.0.51a, for redhat-linux-gnu (x86_64) using readline 5.0


客户端MYSQL版本:

D:\MySQL\MySQL Server 5.1\bin>mysql --version
mysql Ver 14.14 Distrib 5.1.51, for Win32 (ia32)



1、主机上的操作:(IP:192.168.1.1)
修改/etc/my.cnf文件:
在[mysqld]部分添加

server-id=1
log-bin=mysql-bin
binlog-do-db=sims2  (SIMS2换成你要备份的数据库名)


进入mysql命令行状态
mysql -u root -p
输入:



GRANT REPLICATION SLAVE ON *.* TO 'slave_server'@'192.168.1.2',

IDENTIFIED BY '1234';  ##

意思为:

允许 192.168.1.2 这个 IP 使用 slave_server 账号,来进行数据同步(Replication)。

slave_server 这个账号的密码为 1234。


正确执行后:
此时您可以从 Slave Server(192.168.1.2) 使用 mysql client program 进行验证,看是否有正确的开启权限,例如使用以下的指令
在客户端进入mysql命令状态后,执行:

mysql -h 192.168.1.1 -u slave_server -p

接着系统会要求您输入密码(你在主机的MYSQL命令状态下添加的密码),若可以顺利登入即表示设定成功。

重新启动主机的MYSQL服务,在MYSQL命令状态执行:
show master status \G;   如果出现下面类似的,表示主机配置正确

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      334 | sims2        |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)



2、客户端操作

设定my.cnf
在[mysqld]区段加入

master-host=192.168.1.1
master-user=backup
master-password=1234
master-port=3306
server-id=2   一定要和主机不一样(值为2--2^32-1)
master-connect-retry=60 预设重试间隔60秒
replicate-do-db=vbb 告诉slave只做vbb数据库的更新
log-bin   ##网上较老的教程用这个参数log-slave-updates,在新版本中已经不能用

*****以下星号之间部分,为备忘,有的文档需要做这样的操作(这里不需要)****

CHANGE MASTER TO MASTER_HOST='192.168.1.1',

MASTER_PORT=3306, MASTER_USER='slave_server',

MASTER_PASSWORD='1234';

意思为:

Master Server 是 192.168.1.1

使用 TCP Port 3306 连接

使用 slave_server 这个账号登入

登入时使用的密码为 1234

C.启动与检查 Slave Server 的状态

设定好后,Master/Slave 机制仍未启动,您必须要使用以下的指令来开启或关闭 Master/Slave 机制:

START slave; (启动 Master/Slave 机制)

STOP slave; (停止 Master/Slave 机制)

当你执行 'START slave;' 后,可使用以下的指令来检查执行状态:


*******************************************************


3.将要备份的数据库文件打包,并传至备机(我的数据库名为smis2)

#tar xvf /tmp/sims2.tar /mysql/data/sims2

将SIMS2.tar传至备机,并解压缩至备机的MYSQL的DATA目录下。

4、重新启动主机和备机的MYSQL服务

在备机上执行:

SHOW SLAVE STATUS \G

执行后应该会看到如下的报表:

mysql> SHOW SLAVE STATUS \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.1

Master_User: slave_server

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000019

Read_Master_Log_Pos: 16492717

Relay_Log_File: www-relay-bin.000018

Relay_Log_Pos: 16492854

Relay_Master_Log_File: mysql-bin.000019

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: example

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: 16492717

Relay_Log_Space: 16492854

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

1 row in set (0.00 sec)

重点是红色那三行:

Slave_IO_Running:

是否要从 Master Server 复制 Binary Log 数据,必须为 Yes。

Slave_SQL_Running:

是否要执行从 Master Server 复制过来的 Binary Log 数据,必须为 Yes。

Seconds_Behind_Master:

Slave 的数据落后了 Master 多少秒,执行一段时间后应该会是零。


5、这时在备机的mysql/data目录会出现master.info,此档案纪录了Master MySQL server的信息

6、测试:

在主服务器上对数据库进行数据变动,到从服务器或SLAVE端观察数据的变化。




阅读(2409) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-23 22:17:31

不错啊。。。正在测试,希望交流交流下http://www.sunjianhe.com

chinaunix网友2010-10-14 17:17:29

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com