MYSQL群集分为同步和异步,同步至少需要3台机器,而异步2台即可。
公司项目需求只有2台电脑,所以我就研究了下2台MYSQL服务器的数据同步。
这种配置是两台机器互为主备的,即在主增加数据会在备自动复制;在备增加数据在主上自动复制。
环境:2台CentOS5虚拟机+mysql5.0.27
1.1 MySQL安装和启动:
# tar zxvf mysql-standard-5.0.27-linux-i686-glibc23.tar.gz -C /usr/local/ # cd /usr/local/ # mv mysql-standard-5.0.27-linux-i686-glibc23 mysql # cd mysql # groupadd mysql # useradd -g mysql mysql #passwd mysql # ./scripts/mysql_install_db --user=mysql # cp support-files/mysql.server /etc/rc.d/init.d/mysqld # chmod +x /etc/rc.d/init.d/mysqld # chkconfig --add mysqld # /etc/rc.d/init.d/mysqld start
1.1.2 将support-files下面的my-large.cnf复制到/etc/my.cnf里面。
1.2.配置:
1.2.1 IP地址分别为:192.168.0.106(master),192.168.0.107(slave)
1.2.2 将2台机器的防火墙全部关闭。
1.2.3 用telnet测试是否能telnet上两台机器的3306端口。
1.2.4 分别开启两台MYSQL的远程访问功能:
GRANT ALL PRIVILEGES ON *.* TO 'germmy'@'%' IDENTIFIED BY 'germmy' WITH GRANT OPTION;
1.2.5 在192.168.0.106的/etc/my.cnf的[mysqld]段里面的server-id=1注释掉,log-bin=mysql-bin注释掉。
然后添加如下段:
server-id=1
binlog-do-db=adms_db
#log-bin=/usr/local/mysql/master-bin.log
log-bin=mysql-bin
#log-bin-index = /usr/local/mysql/master-log-bin.index
#下面启动失败日志,如果配置这个,MYSQL无法启动可以来这里找原因
log-error = /usr/local/mysql/master-error.log
#relay-log = /usr/local/mysql/slave-relay.log
#relay-log-info-file = /usr/local/mysql/slave-relay-log.info
#relay-log-index = /usr/local/mysql/slave-relay-log.index
set-variable=max_connections=500
master-host=192.168.0.107
master-user=germmy
master-password=germmy
master-port=3306
master-connect-retry=60
replicate-do-db=adms_db
log-slave-updates
同理,在192.168.0.107的/etc/my.cnf的[mysqld]段里面的server-id=1注释掉,log-bin=mysql-bin注释掉。
然后添加如下段:
server-id=2
binlog-do-db=adms_db
log-bin=mysql-bin
#log-bin-index = /usr/local/mysql/master-log-bin.index
log-error = /usr/local/mysql/master-error.log
#relay-log = /usr/local/mysql/slave-relay.log
#relay-log-info-file = /usr/local/mysql/slave-relay-log.info
#relay-log-index = /usr/local/mysql/slave-relay-log.index
set-variable=max_connections=500
master-host=192.168.0.106
master-user=germmy
master-password=germmy
master-port=3306
master-connect-retry=60
replicate-do-db=adms_db
log-slave-updates
1.2.6 在两台机器上建相同的数据库,我这里设的是adms_db;
1.2.7 将2台mysql 全部重启下。
1.2.8 在192.168.0.106上面,执行mysql>show master status :
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 | 98 | adms_db | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
可以看到File为mysq-bin.000006,Pition为98,这个先放这里,后面要用。
1.2.9 在192.168.0.107上面,执行mysql>show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.0.106
Master_User: germmy
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File:
Relay_Log_Pos: 0
Relay_Master_Log_File:
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB: adms_db
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: 0
Relay_Log_Space: 0
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: NULL
1 row in set (0.00 sec)
可以看到Slave_IO_State为空,Master_Log_File为空,Read_Master_Log_Pos为4,这就表示slave和master还未连接上。
我们在192.168.0.107上作如下操作:
mysql>change master to Master_Log_File='mysql-bin.000006',Master_Log_Pos=98;
注意到:mysql-bin后面是6位数,别搞错了。
这一步有时候会提示你必须关掉slave才能操作,用mysql>slave stop停掉slave。
然后再启动slave即可,mysql>slave start;
2.测试:
2.1 在master机器上新增一个表,再insert一条数据,发现在slave上马上就有了。
同理在slave里新增一条记录,在master上也能看到。
3.缺点:
mysql replication有个缺点就是当master,slave仅有一方挂掉的情况下,那么在仅重启那个挂掉的机器时,数据会自动同步过来,但是如果在挂掉的机器上增加数据时,未挂机器收不到数据,因为挂掉的一方的master_log_file会加1,而未挂的一方却依然使用以前的,此时必须通过手动将未挂一方的改成master_log_file改掉,而在未挂机器开始进数据到你人为去改未挂配置的这段时间内,数据是丢失的。方法见上面change master段。
mysl5.0.27下载地址:在google里面输入: mysql-standard-5.0.27-linux-i686-glibc23.tar.gz 即可。
refurl:http://blog.51yip.com/mysql/357.html
http://ninecloud.blog.51cto.com/1899173/1231047 安装MYSQL步骤
http://blog.chinaunix.net/uid-20524648-id-3949093.html MYSQL安装
http://hi.baidu.com/i1see1you/item/129cd666e587a10ba1cf0fe5 MYSQL集群介绍,很犀利