这两天为Mysql的主从配置花了不少精力,有两台相同的Centos服务器,基础的LAMP环境是我自己编译的,所以比较熟悉,由于需要Mysql做主从,一位同事自己配置,但死活配置有问题,我在他的基础上检查也重新配置,解决了一些问题,但出现各种问题,最后无法忍受,我直接把之前的重新推倒,自己重新配置。
google、baidu里很多相关的资料,由于被转载或其他原因大我存在着问题。最终找到一篇国外的资料,写是简单明了。我在他的基础上转过来留个记录,以备用。
1、官方的中文版资料(有点长耐心看)
http://dev.mysql.com/doc/refman/5.1/zh/replication.html#replication-intro
基本了解Mysql的复制是什么回事^v^
2、配置Mysql主从(接下来就要开始动手,本文所有操作在Linux下)
1) 确定主从的Mysql版本要一致。
查看方法:
登入Mysql数据库
#mysql -u root -p
输入密码Mysql密码,进入系统。查看Mysql版本。
select version(); 我的数据库版本是5.1.57
2) 准备工作
首先要做的事情就是要确保每台服务器上的数据库,在相同的状态。
把主上的数据备份,再导入从,主为Server A, 从为Server B。
Server A command line> mysqldump -u <mysql user> -p -c <database name> > <filename of dump>
(copy dump file to Server B)
Server B command line> mysql -u <mysql user> -p<mysql password> -D <database name> < <filename of dump>
3) 创建从用户
接下来要做的事情是建立一个"从用户"每个两个服务器上。这些用户是由MySQL为从主站的连接,并需要给予特定的特权。
Creating A Slave User:
Server MySQL command line> USE mysql;
Server MySQL command line> INSERT INTO user (Host, User, Password, Select_priv, Reload_priv, Super_priv, Repl_slave_priv) VALUES ('<Hostname/IP>', '<slave user>', password('<slave password>'), 'Y', 'Y', 'Y', 'Y');
Server MySQL command line> FLUSH PRIVILEGES;
4) 配置My.cnf
接下来要做的事情是配置每个MySQL服务器。你需要知道每个服务器的IP地址。
在每台服务器上,你需要编辑你的MySQL服务器配置文件(通常称为my.cnf或my.ini)。
下面是需要被添加到服务器A的配置:
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = <IP address of Server B>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin = /usr/local/mysql/var/server-a.bin # change this to a path/name appropriate to your system
binlog-do-db = <database name>
下面是需要被添加到服务器B的配置:
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = <IP address of Server A>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin= /usr/local/mysql/var/server-b.bin # change this to a path/name appropriate to your system
binlog-do-db = <database name>
使您的配置更改后,重新启动在两台服务器。检查你的MySQL错误日志中的任何问题。
5) 服务器同步
在每台服务器上的MySQL命令行,
slave stop;
show master status;
记录File与Position,接下在每台服务器上执行以下命令:
Server MySQL command line> CHANGE MASTER TO MASTER_HOST='<master's IP>', MASTER_USER='<slave user>', MASTER_PASSWORD='<slave password>', MASTER_LOG_FILE='<master's log file name>', MASTER_LOG_POS=<master's log file position>;
执行完命令,在两台服务器上启动复制现在应该工作
START SLAVE
确认复制工作,两台服务器上的"SHOW SLAVE STATUS"命令。无论是"Slave_IO_Running"和"Slave_SQL_Running"应该是"YES"。如果两者都没有,您将需要重新设置复制。
6) 测试
google、baidu里很多相关的资料,由于被转载或其他原因大我存在着问题。最终找到一篇国外的资料,写是简单明了。我在他的基础上转过来留个记录,以备用。
1、官方的中文版资料(有点长耐心看)
http://dev.mysql.com/doc/refman/5.1/zh/replication.html#replication-intro
基本了解Mysql的复制是什么回事^v^
2、配置Mysql主从(接下来就要开始动手,本文所有操作在Linux下)
1) 确定主从的Mysql版本要一致。
查看方法:
登入Mysql数据库
#mysql -u root -p
输入密码Mysql密码,进入系统。查看Mysql版本。
select version(); 我的数据库版本是5.1.57
2) 准备工作
首先要做的事情就是要确保每台服务器上的数据库,在相同的状态。
把主上的数据备份,再导入从,主为Server A, 从为Server B。
Server A command line> mysqldump -u <mysql user> -p -c <database name> > <filename of dump>
(copy dump file to Server B)
Server B command line> mysql -u <mysql user> -p<mysql password> -D <database name> < <filename of dump>
3) 创建从用户
接下来要做的事情是建立一个"从用户"每个两个服务器上。这些用户是由MySQL为从主站的连接,并需要给予特定的特权。
Creating A Slave User:
Server MySQL command line> USE mysql;
Server MySQL command line> INSERT INTO user (Host, User, Password, Select_priv, Reload_priv, Super_priv, Repl_slave_priv) VALUES ('<Hostname/IP>', '<slave user>', password('<slave password>'), 'Y', 'Y', 'Y', 'Y');
Server MySQL command line> FLUSH PRIVILEGES;
4) 配置My.cnf
接下来要做的事情是配置每个MySQL服务器。你需要知道每个服务器的IP地址。
在每台服务器上,你需要编辑你的MySQL服务器配置文件(通常称为my.cnf或my.ini)。
下面是需要被添加到服务器A的配置:
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = <IP address of Server B>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin = /usr/local/mysql/var/server-a.bin # change this to a path/name appropriate to your system
binlog-do-db = <database name>
下面是需要被添加到服务器B的配置:
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = <IP address of Server A>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>
log-bin= /usr/local/mysql/var/server-b.bin # change this to a path/name appropriate to your system
binlog-do-db = <database name>
使您的配置更改后,重新启动在两台服务器。检查你的MySQL错误日志中的任何问题。
5) 服务器同步
在每台服务器上的MySQL命令行,
slave stop;
show master status;
记录File与Position,接下在每台服务器上执行以下命令:
Server MySQL command line> CHANGE MASTER TO MASTER_HOST='<master's IP>', MASTER_USER='<slave user>', MASTER_PASSWORD='<slave password>', MASTER_LOG_FILE='<master's log file name>', MASTER_LOG_POS=<master's log file position>;
执行完命令,在两台服务器上启动复制现在应该工作
START SLAVE
确认复制工作,两台服务器上的"SHOW SLAVE STATUS"命令。无论是"Slave_IO_Running"和"Slave_SQL_Running"应该是"YES"。如果两者都没有,您将需要重新设置复制。
6) 测试
在Server A中插入一条记录查看Server B中是否有,如有则设置成功。
原文:http://www.neocodesoftware.com/replication/