zoukankan      html  css  js  c++  java
  • mysql主从复制-方案2

       MySQL主从介绍

    (两台机器数据同步)

    blob.png

    主:-->binlog

    从:-->relaylog

    主上有一个log dump线程,用来和从的I/O线程传递binlog

     从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地(执行)

    blob.png

    主从的应用场景:

    (1)做数据的备份,(主:作读写数据,从:实时同步,当 主 宕机时,从 也可以即使提供服务 )

    (2)也是做备份。(客户从 从 这台机器上读取数据(但是不能再从上写),减轻主的压力)

     准备工作

    1.两台机器都装上mysql,并且都开启mysql的服务

    ======================== 配置主========================

    blob.png

    主:192.1683.136.133      从:192.168.136.134

    1.修改my.cnf,增加server-id=133和log_bin=canshenglinux1

    log-bin=mysql-bimlog

    binlog_format=mixed

    server-id = 159
    binlog-do-db = bim    #指定数据库
    binlog-do-db = bam
    binlog-do-db = apphub

    blob.png

    2.修改完配置文件后,启动或者重启mysqld服务

    blob.png

    重启完后,我们可以发现在/data/mysql下生成了以在配置文件中定义log_bin=canshenglinux1为开头的文件

    blob.png

    这些文件很重要,不然不能实现主从

    3.把mysql库备份并恢复成cansheng库,作为测试数据(这个库就是用来做主从)

     mysqldump -uroot -p123456 mysql > /tmp/mysql.sql

     mysql -uroot -p123456 -e “create database cansheng”

     mysql -uroot -p123456 cansheng < /tmp/mysql.sql

    4.创建用作同步数据的用户

    (1)先进入到mysql

     (2)再创建同步数据的用户------注意修改参数

     grant replication slave on *.* to 'repl'@slave_ip identified by '123456';

    blob.png

    blob.png

    5.锁定一下表:

    flush tables with read lock;

    (为了同步前数据一致。)

    show master status (查看一下position和file)

    blob.png

    (退出mysql)

    此时查看一下/data/mysql又是什么库

    blob.png

    (一般同步不要同步mysql库,因为里面有很多用户名和密码)

    6.备份一下所需要同步的库:

    mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql

    blob.png

     ===================配置从=======================

    1.查看my.cnf,配置server-id=134,要求和主不一样

    blob.png

    2.修改完配置文件后,启动或者重启mysqld服务

    /etc/init.d/mysqld restart

    blob.png

    3.把主上需要同步的库复制过来:

    scp 192.168.136.133:/tmp/*.sql /tmp/

    blob.png

    临时创建alias,方便使用命令:

    alias 'mysql=/usr/local/mysql/bin/mysql'

    alias 'mysqldump=/usr/local/mysql/bin/mysqldump'

    4.进入mysql

    创建相对应的库:

    create database cansheng;

    create database zrlog;

    create database mysql2;

    5.数据恢复:

    mysql -uroot cansheng < /tmp/mysql.sql

    blob.png

    6.进入mysql

    (1)stop slave;

    (2)change master to master_host='192.168.136.133', master_user='repl', master_password='123456', master_log_file='canshenglinux1.000002', master_log_pos=646207;

    blob.png

    blob.png

    (3)start slave;

    (4)判定主从是否配置成功

    blob.png

    show slave statusG

    blob.png

    这样是表示不成功配置成功的要出现两个yes才成功。

    blob.png

    不成功的因素:

    (1)防火墙 systemctl  stop firewalld

     (2)selinux   -->关闭 sentenforce 0

    (3)用户名是否正确

    {而我的因素是在配置主的时候指定用户名和密码错误了,从头来了一次}

    7.回到主,进到mysql解除table(表)的锁定

    unlock tables;

    blob.png

    至此完成主从配置:

    ===========测试主从同步=====================

    blob.png

    (只需要在主或者从,其中一个配置就可以了。这些参数默认是没有配置的,没有手动配置,那默认是同步所有的库)

    在从上配置尽量使用最后两个,可以避免在忽略某个库或者表时,当级联查询的时候避免出现数据丢失,不该忽略的也忽略了!!



    测试主从是否成功,是否同步!

    1.两台机器都进到mysql下,进到测试的数据库:cansheng2

    blob.png

    blob.png

     此时清空主上的comment表;看看从上的comment表数据是否也清空,从而同步。

    truncate table comment;

    blob.png

    blob.png

    删除表测试:

    blob.png

    blob.png

     我们不能再 从 这台机器上执行mysql操作,不然这时我们的主从就断开。

    (因为此时我们的position已经改变)

    blob.png

    如果此时我们的主从断开了,应该重新执行

    (1)stop slave;

    (2)change master to master_host='192.168.136.133', master_user='repl', master_password='123456', master_log_fil_log_file='canshenglinux1.000002', master_log_pos=646207;

    blob.png

    blob.png

    (3)start slave;

    (4)判定主从是否配置成功

    show slave statusG

    这样是表示不成功配置成功的要出现两个yes才成功。

    blob.png

     

  • 相关阅读:
    多维数组的理解
    C++ STL 中erase()的使用需要小心
    大整数相加和大整数相乘
    project1_calculator(使用tkinter实现python计算器,含有具体过程与注释)
    (转)在Source Insight中看Python代码
    class12_pack_grid_place 放置位置
    (转)AttributeError: module 'tkinter' has no attribute 'messagebox'
    class10_Frame 框架
    class9_Menubar 菜单
    class8_Canvas 画布
  • 原文地址:https://www.cnblogs.com/beyang/p/10749388.html
Copyright © 2011-2022 走看看