• 数据库主从同步


    优点:对于负载比较大的网站,主从同步可以有效缓解数据库读写压力。  当主库有变更事件时,从库进行相应更新,而如果从库有变更,主库是不会进行同步信息的。

    -->mysql主从同步机制:

    1.主服务器(master)将变更事件(更新,删除,表结构变更)写入二进制日志(master  log)

    2.从服务器(slave)的IO线程从主服务器(binlog dump)获取二进制日志,并在本地保存一份自己的二进制日志(relay  log)

    3.从服务器的sql线程读取本地日志(slave  log),重演变更事件

    -->mysql主从同步作用:

    1.可以作为一种备份机制,相当于热备份(在从备份,避免在备份期间影响主服器工作)

    2.可以用作读写分离,均衡数据库负载(主写从读)

    3.当主服务器出现问题,可以切换到从服务器

    -->mysql 主从同步步骤:

    (1)准备工作:

    1.主从数据库版本一致

    2.主从数据库数据一致。(即两个数据库中数据库、表、表数据都要一致,停止数据写入,如果有数据写入,则要进行锁表操作)

    (2)主数据库master修改:
    1、修改MySQL配置:

    # /etc/my.cnf  
    log-bin = mysql-bin  
    
    # 主数据库端ID号  
    server-id = 1  
    
    log-bin=/home/mysql/logs/binlog/bin-log
    max_binlog_size = 500M
    binlog_cache_size = 128K
    binlog-do-db = adb
    binlog-ignore-db = mysql
    log-slave-updates
    expire_logs_day=2
    binlog_format="MIXED"
    #服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。
    server-id = 1 log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。
    #每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。 max_binlog_size = 500M binlog_cache_size = 128K
    #日志缓存大小 binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。 binlog-ignore-db = mysql #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
    #当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。 log-slave-updates expire_logs_day=2
    #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。 binlog_format="MIXED" #设置bin-log日志文件格式为:MIXED,可以防止主键重复。
    2、重启mysql,创建用于同步的账户:
    # 创建slave帐号slave,密码111111 mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111';
    # 更新数据库权限 mysql>flush privileges;
    3、查询master的状态
    mysql> show master status;
    +------------------+----------+--------------+------------------+  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ 
    | mysql-bin.000009 | 196 | | | +------------------+----------+--------------+------------------+  1 row in set


    ============================================================版本二=============================================================================================

    一主多从和一主一从是一样的,从库的配置都相同,但server-id主库从库1从库2都不能同

     

    master 上;

    
    

    1.修改master上的配置文件my.cnf。

    
    

    server-id = 1
    log-bin=mysql-bin
    binlog-do-db=YYY //需要同步的数据库
    binlog-ignore-db=mysql //被忽略的数据库
    binlog-ignore-db=information-schema //被忽略的数据库

     

    2.登陆主库的数据库,进行赋予权限

    mysql> grant replication slave on *.* to 'affairlog'@'192.168.2.182' identified by 'pwd123';

    
    

    //在slave1上登陆成功

    
    

    mysql> grant replication slave on *.* to 'affairlog'@'192.168.2.111' identified by 'pwd123';

    
    

    //在slave2上登陆成功

     

    3.退出数据库并重启数据库服务

    service mysql restart;

    mysql> show master statusG;
    *************************** 1. row ***************************
    File: mysql-bin.000087   重要
    Position: 106       重要
    Binlog_Do_DB: YYY
    Binlog_Ignore_DB: mysql,information-schema
    1 row in set (0.00 sec)



    slave 上:
    1.检查从库上 /etc/my.cnf 文件中的server-id 和主库上的server-id 不能相同

    2.登陆从库数据库,并执行以下代码 (master_log_pos为 show master statusG;中的 Position: 154 )
    change master to master_host='192.168.31.128',master_user='slave1',master_password='LINqiuhua811!', master_port=3306, master_log_file='mysql-bin.000006',master_log_pos= 154;

    3.开启 slave
    start slave;

    4.检查 Slave_IO_Running: Yes 是否都为YES
        Slave_SQL_Running: Yes


    1.如果不为yes,查看日志 Last_IO_Error: error connecting to master 'slave1@192.168.31.128:3306' - retry-time: 60  retries: 1
    解决:ip、端口、用户、密码是否和master中的赋予的权限中的用户密码ip一致
    2.如果不为yes,查看日志 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
    these UUIDs must be different for replication to work.
    因为数据库为克隆的,所以UUIDs参数一致。而主从同步中UUIDs不能一致

    [root@localhost mysql]# vim auto.cnf

    [auto]
    server-uuid=11739547-dc5f-11e7-ad91-000c29e73110

    解决:

    因此要对UUIDs进行修改,即修改 vi /main/mysql/data/auto.cnf 中的auto.cnf文件
    1.进入 /etc/my.cnf 找到 socket=/var/lib/mysql/mysql.sock ,则auto.cnf路径为 /var/lib/mysql/auto.cnf
    2.mv /var/lib/mysql/auto.cnf  /var/lib/mysql/auto.cnf.bk  ###重命名该文件
    3.重启mysql服务 service mysqld restart;
    再进入 auto.cnf 里面的server-uuid值已经修改。




    如何删除主从同步:
    在从服务器上进行 stop slave; reset slave;


    删除后如果又想进行主从同步:(此时binlog位置已经改变,我们需要chang master)
    1.先在主服务器上 show master statusG; 得到File: mysql-bin.000012 Position: 148157两个值
    2.从服务器上
    ①stop slave;
    ②change master to master_host='192.168.31.128',master_user='linqiuhua',master_password='LINqiuhua811!',master_port=3306,master_log_file='mysql-bin.000012',master_log_pos=148157;
     ③start slave;       
    即可开启主从同步















  • 相关阅读:
    前天晚上终于可以骑自行车了
    第一篇cnblog!
    使用web服务查询数据库的例子(上)
    使用网络提供的web服务开发航班查询程序
    使用web服务查询数据库的例子(下)
    .NET技术与企业级解决方案研究应用
    用正则表达式解析url
    基于原型的类继承
    Pub/Sub模式
    函数调用apply
  • 原文地址:https://www.cnblogs.com/linqiuhua/p/7513403.html
Copyright © 2020-2023  润新知