日期:2014-05-16  浏览次数:21055 次

史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同

史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同

操作系统:CentOS 5.8

MySQL版本:5.5.x

原来状况:数据库在一台机器上,已经有一些生产数据

目标:主主复制。两台数据库服务器设置成主主复制方式,即对任何一台的更改都会自动同步到另外一台。

第一台:ip地址为 xxx.xxx.xxx.156? 主机名 s156

第二台:ip地址为 xxx.xxx.xxx.170? 主机名 s170

注:本文中的ip地址均采用 xxx. 形式,运用时根据实际情况修改。

本文链接:http://codingstandards.iteye.com/blog/1535994 转载请注明出处

?

操作步骤一:停止应用运行

在修改mysql配置之前,应该停止与数据库有关的进程(程序),比如:

1. tomcat或其他Web应用容器

使用 service tomcat stop 停止

或者进入 tomcat/bin 执行 ./shutdown.sh)

2. crontab 里面设置的某些与数据库有关的定时任务。

比如:那些检测tomcat是否启动的定时任务。

可以先用 crontab -e 打开,把相应项注释掉(在前面加#号)。

3. 其他与数据库有关的进程。

?

?

操作步骤二:检查主机名

什么情况下需要修改主机名?

如果发现shell命令行提示符是

[root@localhost ~]#

或者用hostname命令得到主机名是localhost

[root@localhost ~]# hostname
localhost

?

为什么需要确认主机名是否正确?

1. 因为有些时候,安装系统的人比较懒,没有在安装时设置主机名;

2. mysql运行时生成日志文件需要用到主机名,尤其是配置成复制(replication)后;

3. 如果在配置了复制之后再进行修改主机名,会造成mysql执行错误,这是我曾经碰到过的情况。

?

如果不需要修改主机名,跳到下一个步骤。

?

注意:需要对两台服务器检查和修改。

?

修改主机名的步骤:

1. 停止与主机名有关系的程序或服务,比如mysql(它生成的日志文件名中包含主机名)

service mysql stop

2. 使用hostname命令修改主机名(假定新主机名为newname)

hostname newname

比如:hostname s156

3. 在/etc/hosts文件中配置主机名的解析(假定ip地址记为ip,主机名newname,域名为yourdomain.com)

127.0.0.1?????????????? localhost.localdomain localhost
::1???????????? localhost6.localdomain6 localhost6

ip ? newname.yourdomain.com newname

比如:xxx.156 s156.hndy16.com s156

4. 在/etc/sysconfig/network中修改HOSTNAME=newname

比如:HOSTNAME=s156

5. 最好重启机器,如果不允许的话,重新登录也行

重启使用 reboot 命令

重新登录使用 exit 命令

6. 看一下命令行提示符和hostname是否正确

[root@s156 ~]# hostname
s156

7. 重新启动第一步中停止的程序或服务,比如mysql

service mysql start

?

操作步骤三: 创建复制账号

需要在两台数据库上创建,假定用户名和密码都是rep。

?

先登录mysql

mysql -pxxx

创建用户账号,只赋予slave权限
grant replication slave on *.* to 'rep'@'xxx.170' identified by 'rep';

清空所有表和块写入语句
flush tables with read lock;

?

PS:2012.06.08

如果真的用rep账号去登录,就会只看到两个数据库。

[root@s170 ~]# mysql -prep -urep -hxxx.156
Welcome to the MySQL monitor.? Commands end with ; or \g.
Your MySQL connection id is 12718
Server version: 5.5.24-log MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| test?????????????? |
+--------------------+
2 rows in set (0.01 sec)

mysql> quit
Bye
[root@s170 ~]#

?

操作步骤四:手工复制数据库

如果两台服务器都是新装的,可以跳过这一步。

?

如果原来单机上有数据,那么需要将数据复制到另外一台上面,让它们在开始复制之前的状态相同。

?

有两种方式:

1. 复制文件法:将数据库的数据文件直接复制到另外一台;

2. 使用 mysqldump 工具导出数据,然后导入到另外一台。

注意:不是所有的数据需要复制,比如 mysql 数据库、information_schema 数据库 和 performance_schema 数据库。

如果 test数据库中没有什么重要数据,也不必复制。

?

我经常采用第2种方式:

mysqldump -pxxx --default-character-set=gbk dbname >dbname.sql

tar zcf dbname.tar.gz dbname

?

通过sftp传到另外一台上面

sftp other_hostname

put dbname.tar.gz

quit

?

或者从另外一台机器上sftp

sftp source_hostname

get dbname.tar.gz

quit

?

将数据解压

tar zxf dbnam