日期:2014-05-16 浏览次数:21120 次
操作系统: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