首页 > xNix平台 > mysql主从同步配置步骤

mysql主从同步配置步骤

2009年12月15日 甜蚂蚁 发表评论 阅读评论

环境均为debian,首先保证mysql的版本一致,如果不一致,做主机的版本不能高于slave机的版本,最好还是一致的,测试时环境如下:
ifc-ftp:~# mysql -V
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
测试环境两台主机ip分别为192.168.100.66,192.168.100.68,其中192.168.100.66为主机(以下简称66),192.168.100.68为从机(以下简称68)
首先配置主机
vi /etc/mysql/my.cnf
修改其中的bind-address字段,默认是127.0.0.1,这将引起其他机器无法正确访问到mysql,改为
bind-address = 192.168.100.66
然后在[mysqld]这一段的配置中加入以下内容:
# sync
server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit = 1
sync_binlog=1
binlog-do-db=phpdisk
binlog-ignore-db=test
binlog-ignore-db=mysql
replicate-do-db=phpdisk

其中的server-id=1表示该机器的id,在同步集群中,这个id是唯一的
binlog-do-db表示需要记录日志的数据库,binlog-ignore-db表示不需要同步的数据库,这个其实在主从模式中是不需要配置的,为了防止配置时失误造成mysql数据库被同步才加上这一段,投入生产环境后可以删除,replicate-do-db表示需要同步的数据库,这里为phpdisk,如果需要同步多个数据库,将其中的replicate-do-db重复就行了,比如
replicate-do-db=aa
replicate-do-db=bb
上面的就表示同步aa和bb数据库
然后加入一个用户
GRANT ALL PRIVILEGES ON *.* TO ‘repl’@’192.168.100.68′ IDENTIFIED BY ‘repl’ WITH GRANT OPTION;
这个用户用来让68访问主机,并且进行同步操作。
到这里主机配置结束,执行
/etc/init.d/mysql stop停止mysql,然后把你的数据库文件拷贝出来,debian apt安装的话在/var/lib/mysql下,我需要同步phpdisk,所以将这个文件夹拷贝出来,并且直接拷贝到68这台服务器上的/var/lib/mysql下,然后执行以下命令
cd /var/lib/mysql
chown mysql:mysql phpdisk
上面的内容是修改phpdisk数据库的权限和所有者,让68的mysql可以写入数据。
到这里数据库准备就结束了,下面开始配置从机
在68上
vi /etc/mysql/my.cnf
因为是从机,所以bind-address字段可以修改,也可以不修改,在[mysqld]这一段的配置中加入以下内容:
# Sync
server-id = 2
master-host = 192.168.100.66
master-user = repl
master-password = repl
replicate-do-db = phpdisk
然后重新启动从机的mysql数据库。

下面开始测试
首先在主机上
mysql -u root -p
输入密码后执行
show master status;
应该可以看到
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000003 | 4613 | phpdisk | test,mysql |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

然后在从机上
mysql -u root -p
输入密码后执行
show slave status \G
应该可以看到
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.66
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 4613
Relay_Log_File: mysqld-relay-bin.000016
Relay_Log_Pos: 716
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: phpdisk
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: 4613
Relay_Log_Space: 716
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: Yes
Slave_SQL_Running: Yes
看看这两段是不是yes,然后在主机上随便插入两条数据,看看从机上的slave status有没有错误,如果有错误,在Last_Error: 这一段会显示,根据错误去排错。

以上是主从同步的方法,如果需要双机热备,只要互相做slave即可

具体从slave恢复master的办法:

在master端执行:

CHANGE MASTER to MASTER_HOST=’192.168.100.68′, MASTER_PORT=3306, MASTER_USER=’repl’, MASTER_PASSWORD=’repl’, MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=98 ;

其中 MASTER_HOST 为slave的ip, MASTER_LOG_FILE, MASTER_LOG_POS为切换到slave时记录下的File和Position值。

在master执行:start slave;

待master内容基本恢复以后(在master执行:show slave status \G; Slave_IO_State显示为Waiting for master to send event)

将应用切换回master。

分类: xNix平台 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.