代码改变世界

Mysql主从复制配置

2013-09-26 16:29  hduhans  阅读(192)  评论(0)    收藏  举报

  数据库主从复制系统是由一台主数据库服务器和若干台从数据库服务器组成的,从服务器不断从主服务器获取bin-log日志,并执行,从而保持与主服务器数据同步。主从复制有如下优点:①如果主服务器出现问题,可以快速切换到从服务器继续提供服务 ②负载均衡,可以在从服务器执行数据查询操作,降低主服务器的压力(对更新不频繁的数据或对实时性要求不高的数据可以通过从服务器查询) ③可以在从服务器上执行备份,以避免在主服务器上执行备份而影响数据服务。

  本文是笔者搭建mysql主从复制实验环境是Vmware+linux。

  

一  实验准备

  1、实验环境

     主服务器:操作系统CentOS、数据库Mysql-5.0.95、IP地址192.168.10.1

     从服务器:操作系统CentOS、数据库Mysql-5.0.95、IP地址192.168.10.2  

  2、bin-log日志

     开启bin-log日志,配置文件(/etc/my.cnf)增加一行:log-bin=mysql-bin[mysqld]下

     查看bin-log是否开启,登录mysql,命令:show variables like '%bin%';   --log_bin=ON说明bin-log日志已开启

       bin-log相关sql操作:① mysql>flush logs;   --mysql系统会生成一个最新的bin-log日志,可记录当前时刻后的所有数据库操作。

                 ② mysql>show master status;  --查看最后一个bin-log日志

                 ③ mysql>reset master;   --清空所有的bin-log日志(清除后剩余mysql-bin.index和mysql-bin.000001)

    查看bin-log日志内容:/use/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001

             参数:1) --stop-position="100"  2) --start-position="50"  

                3) --stop-date="2013-09-26 16:17:36"  4) --start-date="2013-09-26 16:36:21"    

    执行bin-log日志恢复数据库:/use/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | mysql -uroot -p123456 test

  3、mysql数据库备份

     命令:mysqldump -uroot -p123456 test -l -F > '/test/test.sql'

          test --备份数据库

          -l 写锁 避免在备份时数据库有写入操作

        -F = Flush logs,产生新的日志文件(包括log-bin)

二  配置步骤

  1、(主服务器)设置对从服务器的数据库授权

--方法一
grant all on *.* to user1@192.168.10.2 identified by '123456';
--方法二
grant replication slave on *.* user1@192.168.10.2 identified by '123456';
--刷新权限
flush privileges;

     (从服务器)使用user1测试登录,mysql -uuser1 -p123456 -h192.168.10.1,如果能登录,说明数据库授权成功!

  2、(主服务器)修改数据库配置(my.cnf)

    server-id=1   --确保主服务器的server-id唯一

  3、(从服务器)修改数据库配置(my.cnf)

    server-id=2   --从服务器server-id=2唯一

    master-host=192.168.10.1

    master-user=user1

    master-password=123456

    master-port=3306

  4、(从服务器)重启mysql,命令:mysql restart

  5、(从服务器)查看slave状态,使用本地账号进入数据库

    show slave status\G;

    若Slave_IO_Running=Yes和Slave_SQL_Running=Yes,则说明mysql数据库主从复制配置成功

   说明:1) Slave_IO_Running 进程负责从服务器到主服务器读取binlog日志,并写入从服务器的中继日志

        2) Slave_SQL_Running 进程负责读取并执行中继日志中的binlog日志

      3) 从服务器常用命令:① start slave  --启动复制线程 

                ② stop slave  --停止复制线程 

                ③ show slave status   --查看从服务器数据库状态 

                ④ show master logs  --查看主数据库bin-log日志 

                ⑤ change master to   --动态改变到主服务器的配置 

                ⑥ show processlist  --查看从服务器运行进程

三 数据库无法同步可能原因

  1、虚拟机环境,两个系统网络需设置为Host-Only

  2、可能在从服务器上进行了写操作,可能是从服务器重启后事务回滚造成的,解决办法:

    mysql>slave stop;

    mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

    mysql>slave start;