mysql搭建主从数据库

yeyedeyatou 2014-09-26

在线上应用运行的过程中,可能会由于某些原因mysql数据库挂掉了,造成数据丢失或影响线上应用的使用。这时候定时对数据库备份就显得尤为重要。这里主要是介绍主从数据库配置,当主库不能正常使用时,可迅速切换到备库,以保证正常运行。

服务器环境:

   主服务器:192.168.200.24     操作系统:centos    数据库版本:5.0.95    master

   从服务器:192.168.200.247     操作系统:centos    数据库版本:5.1.73    slave

   配置的话最好数据库版本一致。  查看mysql版本:mysql  -V

步骤:

     1.创建同步账户,让两个mysql可以可以互相访问

   在24上进入mysql执行命令: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.200.247' IDENTIFIED BY '123456' WITH GRANT   OPTION; (通过账号root密码123456连接247上的库,权限为所有)

   在247上进入mysql执行命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.200.24' IDENTIFIED BY '123456' WITH GRANT  OPTION;

     执行 flush privileges;(可使以上执行的grant立即生效)

    创建完后,就可以正常通过mysql命令连接到对应服务器上的mysql库了。如果连接不上,检查下防火墙是否已关闭。

     2.修改两台mysql的配置文件

    24上在[mysqld]中添加

            log-bin=mysql-bin

            server-id=1    必须指定,且不能重复

            binlog-ignore-db=mysql    不需要同步的库

            binlog-ignore-db=information_schema  不需要同步的库

            replicate-do-db=meizi4      需要同步的库,若有多个可写多行

    247上在[mysqld]中添加

             log_bin =  mysql-bin

             server-id = 2      必须指定,且不能重复

             replicate-do-db =meizi4   需要同步的库,若有多个可写多行

    配置完后要重新启动两个mysql数据库

    启动方法:service mysqld start   或mysqld_safe &

    停止mysql:service mysqld stop

    若mysql启动报错,可查看mysql日志,错误日志可在my.cnf中配置log-error,没有配置则在默认安装目录的hostname.err中

    3.得到master的状态信息:show master status;  记录下File和Position 的值,4将会用到。File=mysql-bin.000002  Position =98

   4.登陆247的mysql,执行命令:change master to master_host='192.168.200.24',master_user='root',master_password='123456',master_port=3307,master_log_file='mysql-bin.000002  ',master_log_pos=98;

   5.查看数据库状态

     show slave status\G;

    察看结果字段Slave_IO_State,一般应该为"Waiting for master to send event";此时Slave_IO_Running和Slave_SQL_Running应该为true,

如果不是,在slave端执行: stop slave; start slave; 重启复制进程。

重启slave的时候出现报错:The server is not configured as slave; fix in config file or with CHANGE MASTER TO

原因:slave的server-id配置有问题 查看 show variables like 'ser%'; 结果显示为0.明明配置的2  显然之前配置的未生效。server-id需配置到[mysqld]下

Replicate_Do_DB为要复制的数据库,和my.cnf配置的相同。

120326 11:10:23 [ERROR] /usr/local/mysql//libexec/mysqld: File '/data/mysqldata/3306/binlog/mysql-relay-bin.000002' not found (Errcode: 2)  我在执行show slave status\G时出现以上错误,执行了reset slave;就好了
   至此数据库主从关系就搭建好了。在主库24上对数据库进行操作(建表、插入数据、更新数据、删除)都会同步到247的数据库中,但是对247的修改则不会同步过去.
   master故障处理:
    当master出现故障时,可以迅速将应用连接到slave上,这时候应用就连的我们的备库上了,首先在slave端执行:show master status。保存File和Position两个值,切记一定要保存,这两个值可用于由slave恢复master.如:File=mysql-bin.000006   Position=4434
      由于在master故障期间,更新的新数据都到slave里了,我们需要把更新的数据同步到master中。同步步骤:
       1.在master端执行:CHANGE MASTER to MASTER_HOST='192.168.200.247', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=4434;
其中 MASTER_HOST 为slave的ip, MASTER_LOG_FILE, MASTER_LOG_POS为切换到slave时记录下的File和Position值。
       2.在master执行:start slave;
       3.待master内容基本恢复以后(在master执行:show slave status \G; Slave_IO_State显示为Waiting for master to send event)将应用切换回master。
       4.待系统稳定后master执行:stop slave停止slave。
执行完以上4步后master中的数据也恢复了,以后在master中更新数据,仍会同步至slave.
 
 
 

相关推荐