Mysql数据库做多台replication

最近做了研究了一下mysql数据库的replication,做一下小结!

4台服务器,操作系统都是是CentOS 5.5

Host1:192.168.2.81

Host2:192.168.2.82

Host3:192.168.2.83

Host4:192.168.2.84

目的:Host1做master,Host2-4做slave,同步复制Host1的Mysql数据库。

 

1)在Host1-4上面都安装好mysql,帐号root,密码123456

 

2)先配置Host1-4的mysql配置文件

    Host1:vi /etc/my.cnf

    在[mysqld]下面添加如下几行:

    server-id                    =    1             #标识mysql中的id号,这里用1标识master,后面的Host2-4分别用2,3,4 来标识

                                                       #各台主机的id号不能一样,而且数字越小,表示的级别越高   

    log-bin                                        #开启log日志记录,必须的,这样slave才能通过读取log来知道master的操作

    expire_logs_days      =  5               #保留多少天前的日志

    binlog-ignore-db        =  mysql        #忽略掉mysql这个 数据库的同步,其他的数据库都会同步

    #binlog-do-db           =  sales         #同步sales这个数据库,相应的slave服务器的mysql配置文件里面也要设置

    Host2-4:vi /etc/my.cnf

    在[mysqld]下面添加如下几行:

    server-id                    =    2              #Host2是2,Host3是3,Host4是4

    read-only                   =    1              #只读,防止除了replication之外的进程来对数据库做修改

    replication-ignore-db =mysql       #忽略同步的数据库

 

3)将Host1mysql重启/etc/init.d/mysqld restart,然后在Host1的mysql数据库里面给82,83,84授权

     mysql -u root -p 123456

     mysql> grant file,select, replication slave on *.* rep@'192.168.2.82' identified by 'rep';

     mysql> grant file,select, replication slave on *.* rep@'192.168.2.83' identified by 'rep';

     mysql> grant file,select, replication slave on *.* rep@'192.168.2.84' identified by 'rep';

 

4)授权之后锁表,以便备份数据库文件到slave服务器进行初始化

     mysql> flush tables with read lock;

     Query OK, 0 rows affected (0.00 sec)

     显示master数据库的状态,记下当前二进制日志文件名和position

     mysql> show master status;

     +——————+———-+————–+——————+
     | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
     +——————+———-+————–+——————+
     | mysql-bin.000002 | 228 | | |
     +——————+———-+————–+——————+

     1 row in set (0.00 sec)

 

5)将Host1的/var/lib/mysql/目录下的数据库打包拷贝到Host2,Host3,Host4的目录下面,注意,如果Host2,Host3,Host4的/var/lib/mysql/目录下面有master.info和relay-log.info之类的文件,请先删掉他们!最好是将/var/lib/mysql/目录下的除mysql数据库的其它文件夹都给删掉,将拷贝过来的数据库解压的这个目录下面。

 

6)启动Host2,Host3,Host4的mysql数据库

     /etc/init.d/mysqld start

     mysql -uroot -p123456

     执行如下命令:

     mysql> change master to
        -> master_host='192.168.2.81',
        -> master_user='rep',
        -> master_password='rep',
        -> master_log_file='mysqld-bin.000002',
        -> master_log_pos=228;
     Query OK, 0 rows affected (0.01 sec)

     注意到这里master_log_file和master_log_pos就是前面4)里面show master status的结果。

 

     启动复制进程
     mysql> start slave;
     Query OK, 0 rows affected (0.00 sec)

 

7)将master的数据库解锁

     mysql> unlock tables;

     Query OK, 0 rows affected (0.00 sec)

 

8)创建测试table,插入数据
     mysql> use test
     Database changed


     mysql> create table testrep(i int);
     Query OK, 0 rows affected (0.05 sec)

     mysql> insert into testrep values(1);
     Query OK, 1 row affected (0.00 sec)

 

      到Host2-4的数据库中查询

      mysql> select * from testrep;
      +——+
      | i |
      +——+
      | 1 |
      +——+
      1 row in set (0.00 sec)

      这样数据就已经从master复制到slave了。

 

      在从库的数据库目录下面,有几个和复制相关的文件:

      mysqld-relay-bin.* 从master数据库同步过来的binlog文件,也叫中继日志;

      master.info  master数据库帐号信息和同步信息,这里记录了复制用户名和密码

      relay-log.info  跟踪执行同步过来的binlog的执行情况

 

      在网上收mysql的replication的时候,看到很多人都在slave的my.cnf配置文件里面添加了同步的master数据库的信息

      master_host='192.168.1.95',
      master_user='rep',
      master_password='rep',

      需要说明一下,当/var/lib/mysql/目录下面没有master.info这个文件的时候,mysql启动的时候才会从my.cnf文件里面读取这些信

      息,而在有master.info的时候,mysql直接从master.info里面读取master数据库的信息。所以个人还是喜欢不把那些信息写在配置

      文件里面,而是在slave上第一次做replication的时候执行change master to 。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值