当前位置:首页 > Mysql教程 > 列表

MYSQL双机热备份的配置实施

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-25 14:57:28 浏览: 评论:0 

到此,MYSQL版本5.1.7以前的双机热备已经配置成功.

二、版本5.1.7以后,以版本5.5.17为例

同版本5.1.7以前一样,先编辑MYSQL_A和MYSQL_B上的my.cnf配置文件,加入如下参数:

  1. Server-id=n  //服务id,每个数据库都不一样,“n”代表ID号,在MYSQL_A上设为1,在MYSQL_B上设为2。 
  2.  
  3. log-bin=log_name //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称 
  4.  
  5. binlog-do-db=asymt   //记录日志的数据库 
  6.  
  7. binlog-ignore-db=mysql   //不记录日志的数据库 , 这就避免了Master上的权限设置等被同步到Slave上,如果对这方面没有限制,就可以不设置这个参数。 

设置同步数据库的用户帐号,分别重启MYSQL_A和MYSQL_B上的MYSQL数据库,然后登陆mysql,运行如下命令:

  1. MYSQL_A: 
  2.  
  3. mysql> GRANT REPLICATION SLAVE ON *.* TO 'asymt'@'192.168.100.200' IDENTIFIED BY '123456'

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

  1. mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 'asymt'@'192.168.100.200' IDENTIFIED BY '123456'
  2. //开源代码phpfensi.com 
  3. MYSQL_B: 
  4.  
  5. mysql> GRANT REPLICATION SLAVE ON *.* TO 'asymt'@'192.168.100.100' IDENTIFIED BY '123456'

如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 'asymt'@'192.168.100.100' IDENTIFIED BY '123456';

用上文的方法先锁定数据库并备份MYSQL_A上的数据然后还原到MYSQL_B上最后把数据库的锁定释放,分别根本法MYSQL_A和MYSQL_B上的mysql查看主服务器状态:

  1. MYSQL_A: 
  2.  
  3. mysql> show master statusG; 
  4. +---------------+----------+--------------+------------------+ 
  5. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  6. +---------------+----------+--------------+------------------+ 
  7. | mysql-bin.002 | 70 | asymt | mysql | 
  8. +---------------+----------+--------------+------------------+ 
  9. MYSQL_B: 
  10.  
  11. mysql> show master statusG; 
  12. +---------------+----------+--------------+------------------+ 
  13. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  14. +---------------+----------+--------------+------------------+ 
  15. | mysql-bin.003 | 73 | asymt | mysql | 
  16. +---------------+----------+--------------+------------------+ 

记录File 和 Position 项目的值,以后要用的,分别登陆上MYSQL_A和MYSQL_B的MYSQL并设置主服务器的各种参数:

  1. MYSQL_A: 
  2.  
  3. mysql> CHANGE MASTER TO 
  4. -> MASTER_HOST='192.168.100.200',     //同步数据库的IP 
  5. -> MASTER_USER='asymt',              //同步数据库的用户 
  6. -> MASTER_PASSWORD='123456',        //同步数据库的密码 
  7. -> MASTER_LOG_FILE=' mysql-bin.003',  //主服务器二进制日志的文件名(前面要求记住的参数) 
  8. -> MASTER_LOG_POS=73;             //日志文件的开始位置(前面要求记住的参数) 
  9.  
  10. MYSQL_B: 
  11.  
  12. mysql> CHANGE MASTER TO 
  13. -> MASTER_HOST='192.168.100.100',     //同步数据库的IP 
  14. -> MASTER_USER='asymt',              //同步数据库的用户 
  15. -> MASTER_PASSWORD='123456',        //同步数据库的密码 
  16. -> MASTER_LOG_FILE=' mysql-bin.002',  //主服务器二进制日志的文件名(前面要求记住的参数) 
  17. -> MASTER_LOG_POS=70;             //日志文件的开始位置(前面要求记住的参数) 

然后分别在MYSQL_A和MYSQL_B的mysql里运行“slave start”来启动同步数据库的线程.

查看主从服务器的状态:mysql> SHOW PROCESSLISTG //可以查看mysql的进程看看是否有监听的进程.

至此,版本5.5.17的双机热备配置完成.

最后分别在MYSQL_A和MYSQL_B的数据库里面插入大量数据查看效果,如果在数据库插入数据时提示“xx is read only”,请运行“$MYSQLHOME /bin/mysqladmin -u <username> -p flush-tables”命令解决.

mysql双机热备实施

1、建立mysql数据库双向热备,首先建立复制帐号,帐号名和密码为“slaveuser”,执行的sql语句如下:

GRANT REPLICATION SLAVE ON *.* TO 'slaveuser' @ '%' IDENTIFIED BY 'slaveuser';

#GRANT REPLICATION SLAVE ON *.* TO 'slaveuser' @ 'RedunHost' IDENTIFIED BY 'slaveuser';

2、修改主备机的my.cnf配置文件:

  1. server-id = 1 
  2.  
  3. log-bin=mysql-bin  
  4. relay-log=relay-bin 
  5.  
  6. log-slave-updates 
  7.  
  8. #slave-skip-errors = all(可选) 
  9.  
  10. master-host     =   RedunHost 
  11. master-user     =   slaveuser 
  12. master-password =  slavepass 
  13.  
  14. master-port=8004
  15.  
  16. #跨库操作配置 
  17.  
  18. replicate-wild-do-table=db_name.% 
  19.  
  20. 如果需要同步跨库操作,需使用 –replicate-wild-do-table=db_name.% 选项 
  21.  
  22. #replicate-do-db=db_name 指定要复制的数据库,本身不支持跨库更新 
  23.  
  24. replicate-do-table=db_name.t_name (db_name.%) 同replicate-do-db功能类似,与replicate-do-db区别,支持跨库更新 

注解:

server-id = 1 服务器ID号,整数值,保证唯一标识一台服务器就可以 

log-bin=mysql-bin  打开二进制日志

relay-log=relay-bin 中继日志名称 

master-host  =  RedunHost

主服务器IP地址或者主机名,比如:172.20.16.204 

master-user= slaveuser

主服务器上创建的复制用户帐号名称,比如以上创建的:slaveuser

master-password=slaveuser

主服务器上创建的复制用户帐号密码,比如以上创建的:slaveuser

relay-log-index=relay-bin 

中继索引文件名称

slave-skip-errors =all 是跳过错误,继续执行复制操作(可选)

log-slave-updates

log-slave-updates 这个参数一定要加上,否则不会给更新的记录些到二进制文件里

主备机执行Reset master;stop slave;reset slave;start slave;重启主备机mysql服务,主备机执行show slave status/G,如果复制状态Slave_IO_Running,Slave_SQL_Running都为Yes,说明复制已经配置正确.

注:以上配置针对主备机数据库数据一致进行的操作,若要某些操作不记录mysql同步日志,可以用“set SQL_LOG_BIN = 0或1;”设置打开记录mysql同步日志的开关.

部署问题小结

1. mysql互为主从,但是在SLAVE执行CHANGE MASTER时,出现这个错误:ERROR 1201 (HY000): Could not initialize master!

mysql> slave stop;mysql> reset slave;

出现这个问题的原因,应该是以前mysql做过主从.

2. 启动Cobar时报错Error: JAVA_HOME environment variable is not set.

修改/etc/profile文件:

  1. export JAVA_HOME=/usr/java/jdk1.6.0_23 
  2.  
  3. export JRE_HOME=/usr/java/jdk1.6.0_23/jre 
  4.  
  5. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
  6.  
  7. export PATH=$JAVA_HOME/bin:$PATH 
  8.  
  9. ldconfig 

注销当前用户.

3. Start Slave后使用show slave statusG;检查报错error reconnecting to master 'slave@192.168.0.100:3306' - retry-time: 60 retries: 86400,然后登录192.168.0.100主数据库,允许从数据库同步相关数据;

grant replication slave on *.* to slave@192.168.0.200 identified by '******'

再次重启从数据库即可.

4. /etc/my.cnf无效,MySQL启动时候不读取该文件:

mysqld_safe --defaults-file=/etc/my.cnf

5. 检查rpm命令安装软件的路径

rpm -ql 套件 #列出rpm软件包的相关目录

rpm -qc 套件 #列出rpm软件包的设置文档

rpm -qd 套件 #列出rpm软件包的说明数据文件的完整路径

6. Start slave后报错ERROR 1200 (HY000): The server is not configured as slave

a) 使用命令SHOW VARIABLES LIKE 'server_id'检查

b) 如果server_id与my.cnf中配置id不一样,则使用SET GLOBAL server_id = 2;修改与配置中相同的值

c) 重启slave

Tags: MYSQL双机 MYSQL热备份

分享到: