您的位置:首页 > 数据库 > MySQL

我自己配置Mysql Master/Slave的过程

2013-11-19 10:10 309 查看
Mysql master/slave配置过程

一般master用来写,表类型采用InnoDB,在并发很多的情况下,InnoDB的表现肯定要比MyISAM强很多;slave用来读,表类型采用MyISAM,一个master可以对应一个或多个slave,一般情况下来说读比写多吧,不过也要根据实际情况来定。

A服务器(WindowsXP): 192.168.1.54 主服务器master

B服务器(Linux): 192.168.1.23 副服务器slave

A服务器设置

#提示,此处最好用mysql的命令行执行命令,用SQLyog等工具时可能不行

mysql -u root -p

mysql>GRANT FILE ON *.* TO backup@192.168.1.23 IDENTIFIED BY '1234';

mysql>GRANT REPLICATION SLAVE ON *.* TO backup@192.168.1.23;

mysql>exit;

上面是Master开放一个账号backup密码1234给IP:192.168.1.23有档案处理的权限

停止mysql的服务,防止数据库中增加新的数据,确保复制到slave中的数据是一样的

(此时如果是用mysqldump导出数据的话,则不能停止mysql服务,停止web server就可以了,net stop apache服务名称)

停止mysql

mysqladmin -u root -p shutdown

或用net stop mysql服务名称(如mysql)

导出数据库结构及数据

D:\>mysqldump -u root -p ms_test > ms_test.sql

Enter password: ****

备份Master所有数据库结构及数据, MySQL是要在stop情况下

在A机器上修改my.ini

在[mysqld]区段内加入参数

log-bin=mysql-bin

server-id=1

#sql-bin-update-same

binlog-do-db=ms_test

重启A服务器mysql

B服务器设置

设定/etc/my.cnf

在[mysqld]区段加入

#added by alex in 08/21/1008

master-host=192.168.1.54

master-user=backup

master-password=1234

master-port=3306

server-id=2

master-connect-retry=60

replicate-do-db=ms_test

将A上备份的数据库结构及数据copy到B服务器上,然后将数据库结构及数据导入到B服务器中

因为导出的文件ms_test.sql中不含有创建数据库的sql语句,

一是方法是在B服务器上手动创建数据库

另一种方法是把create database if not exists `ms_test`;加到ms_test.sql的前面即可

这里我们采用在B服务器上手动创建数据库ms_test

mysql> create database if not exists `ms_test`;

Query OK, 1 row affected (0.00 sec)

导入数据库结构及数据

[root@www var]# mysql -u root -p ms_test < /root/ms_test.sql

Enter password:

重启B服务器的mysql

这时在/var/lib/mysql目录会出现master.info,此档案纪录了Master MySQL server的信息.

B服务器上的master.info

[root@www var]# more master.info

14

mysql-bin.000007

316

192.168.1.54

backup

1234

3306

60

0

B服务器上的www.sns.com.err

[root@www var]# cat www.sns.com.err

080822 15:00:01 mysqld started

080822 15:00:01 [Warning] The syntax for replication startup options is deprecated and will be removed in MySQL 5.2. Please use 'CHANGE MASTER' instead.

080822 15:00:01 InnoDB: Started; log sequence number 0 3105623

080822 15:00:01 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=/usr/local/mysql/var/www-relay-bin' to avoid this problem.

080822 15:00:01 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.

Version: '5.0.45-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution

080822 15:00:01 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000007' at position 98, relay log '/usr/local/mysql/var/www-relay-bin.000016' position: 235

080822 15:00:01 [Note] Slave I/O thread: connected to master 'backup@192.168.1.54:3306', replication started in log 'mysql-bin.000007' at position 98

A服务器上mysql-bin.000007的内容为



--------------------------------------------------------------------------

状况测试

1.A跟B网络及服务都正常情况下,由A端变化数据后,到B端浏览数据,检视是否有进行replication?

2.模拟B当机,或是B不一定需要一直跟A有连接,将由A端变化数据后,到B端浏览数据,B点应该是没有数据变化的

我自己的测试:

在A服务器上添加数据前查看B服务器上的数据,有3条

mysql> select * from member;

+----+--------+------+

| id | name | age |

+----+--------+------+

| 1 | caihf | 20 |

| 2 | server | 11 |

| 3 | dd | 0 |

+----+--------+------+

3 rows in set (0.00 sec)

在A服务器上用工具SQLyog(其它的工具也可,用程序也可),加入一条数据

4 master/slave 127

然后再在B服务器上查看数据,发现有4条记录了,新添加的数据也在里面了,说明master/slave已经配置成功了!

mysql> mysql> select * from member;

+----+--------------+------+

| id | name | age |

+----+--------------+------+

| 1 | caihf | 20 |

| 2 | server | 11 |

| 3 | dd | 0 |

| 4 | master/slave | 127 |

+----+--------------+------+

4 rows in set (0.00 sec)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: