随笔 - 366  文章 - 0  评论 - 101  阅读 - 30万

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 status\G   #这里不需要加 ;  不然会提示错误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 STATUS\G   #这一步内容为空  不正常  说明主从没连接上 检查之前的连通性 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 STATUS\G

复制代码
*************************** 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 status\G  和从服务器的  show  slave status\G    中的两个数据是否相同

 

posted on   寒星12345678999  阅读(222)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示