mysql 集群 异步(附安装)

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集群介绍,很犀利

 

 

 

 

 

你可能感兴趣的:(mysql,mysql安装)