zoukankan      html  css  js  c++  java
  • mysql主从复制

     把数据库文件及存储位置移到drbd块中,my.cnf最好也放在drbd中 当切换到备机的时候就不需要再次配置mysql

    在heartbeat资源脚本目录建立mysql启动脚本的软连接:[root@node1 ~]# ln -s /etc/init.d/mysqld /usr/local/ha/etc/ha.d/resource.d/mysqld

    http://www.blogjava.net/dongbule/archive/2010/08/22/329602.html

    http://369369.blog.51cto.com/319630/790921/

    http://my.tv.sohu.com/us/181018113/59392643.shtml

    测试环境: centos6.5   108主服务   114 从服务器   备份库名:zzx

    1、主服务器配置my.cnf

    [root@localhost ~]# vi /etc/my.cnf   [mysqld]添加如下 

    [mysqld]

    log-bin = mysql-bin                       # 开启BINLOG   ,实际目录应该是上面语句的datadir=/var/lib/mysql
    server-id=1                                  #随便都可以

    修改后restart mysql 不能重启就是配置文件写错了

    2、主服务器给从服务器访问授权  

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slavezzx'@'192.168.0.114' IDENTIFIED BY '123456';//这里用114表示从114可访问  这样slave才能访问到master进行同步

    Query OK, 0 rows affected (0.13 sec)

    mysql> select host,user,Password from mysql.user;  #可以查看到刚添加的slavezzx用户   从服务器用这个用户访问主服务器

     

    3、获取主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

    mysql> show master statusG   #这里不需要加 ;  不然会提示错误ERROR: No query specified

    *************************** 1. row ***************************            

    File: mysql-bin.000002        

    Position: 106    

    Binlog_Do_DB:

    Binlog_Ignore_DB:

    1 row in set (0.00 sec)

    ERROR: No query specified

    4、mysqldump备份数据库然后传给从服务器 

    mysql> flush tables with read lock;   #锁定数据库的写入  确保数据完整

    Query OK, 0 rows affected (0.19 sec)

    之后是mysqldump

    mysqldump -h127.0.0.1 -p3306 -uroot -p zzx > /root/zzx.sql

    最好在主数据库备份完毕,恢复写操作

    mysql> unlock tables;

    Query OK, 0 rows affected (0.28 sec)

    (6)将刚才主数据备份的test.sql复制到从数据库,进行导入   mysql -uroot -p test <  /root/zzx.sql

    (7)接着修改从数据库的my.cnf,增加server-id参数,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置

    [mysqld]

    server-id=2

    log-bin = mysql-bin       

    master-host =192.168.1.108

    master-user=slavezzx

    master-pass=123456

    master-port =3306

    master-connect-retry=60

    replicate-do-db =zzx   #备份zzx这个database

    mysql> show variables like 'server_id';     #这条语句检查value值  正确的话主服务器显示设置的1  从显示设置的2  

    8、重启从服务器mysql 接着测试从服务器和主服务器的连通性     注意selinux和iptables

    [root@localhost ~]# mysql -u slavezzx -h 192.168.1.108 -p    #确保能连接  ,exit

    9、在从服务器进行show salve status验证

    mysql> SHOW SLAVE STATUSG   #这一步内容为空  不正常  说明主从没连接上 检查之前的连通性 selinux和iptables

    如果前面验证失败 进行修改  change
    mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.108', MASTER_USER='slavezzx', MASTER_PASSWORD='123456' ,master_log_file='mysql-bin.000002',master_log_pos=106;   #log_file文件多写了一个.  导致弄了几个小时到处检查,这里的MASTER_HOST其实也是heartbeat的VIP地址,log_pos表示日志的Position一般用98这个起始值

    ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first     # change的时候需要先stop slave

    mysql> slave stop;

    Query OK, 0 rows affected (0.00 sec)

    change完 slave start; //启动同步功能

    mysql> SHOW SLAVE STATUSG

    *************************** 1. row ***************************
                   Slave_IO_State: 
                      Master_Host: 192.168.1.108
                      Master_User: slavezzx
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: 
              Read_Master_Log_Pos: 4
                   Relay_Log_File: mysqld-relay-bin.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: 
                 Slave_IO_Running: No    # change时语法写错  file文件名字写错一个.   
                Slave_SQL_Running: No    #iptables没关导致无法连接
                  Replicate_Do_DB: zzx
              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: 106
                  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
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 1593
                    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
    1 row in set (0.00 sec)

     结果  以上两个必须为YES

    (10)好了,现在可以在我们的主服务器做一些更新的操作,然后在从服务器查看是否已经更新

    数据能否同步  主要检查  主服务器的 show master statusG  和从服务器的  show  slave statusG    中的两个数据是否相同

  • 相关阅读:
    社区运营一点事
    从拉动APP下载谈运营
    c#基础学习(0702)之面向对象和方法重写概述
    c#基础学习(0706)之使用虚方法实现多态
    c#基础学习(0703)之string.Format格式化日期
    c#基础学习(0701)之一些简单的方法练习
    c#基础学习(0630)之面向对象总习
    c#基础学习(0629)之导出Excel方法
    c#基础学习(0628)之使用进程打开指定的文件、模拟磁盘打开文件
    c#基础学习(0627)之类型转换、算数运算符++、--
  • 原文地址:https://www.cnblogs.com/hanxing/p/4400995.html
Copyright © 2011-2022 走看看