zoukankan      html  css  js  c++  java
  • 转 mysql 主从复制以及binlog 测试 (5.7)


    https://www.cnblogs.com/feiyun8616/p/9009497.html
    (这篇文档描述了5.6 版本搭建从库),以下文档描述了5.7 版本mysql 从库的搭建。
    5.7 版本使用600M tar 解压包,使用非编译 安装法

    5.6 版本使用300M tar 解压包,使用非编译安装法

    这里主要参考的模板为以下文档,感谢payon
    https://www.jb51.net/article/108726.htm


    ###for mysql 5.7

    ##感谢关键步就几步
    https://www.cnblogs.com/javabg/p/9951852.html

    strings /lib64/libc.so.6 | grep GLIBC

    cp /dbsoft/lxy/mysql/nbu/mysqlbackup /usr/bin/mysqlbackup

    scp mysql-advanced-5.7.24-linux-glibc2.12-x86_64.tar.gz cradmin@56.18.99.206:/tmp/dba
    tar -xzvf mysql-advanced-5.7.24-linux-glibc2.12-x86_64.tar.gz

    groupadd mysql
    useradd -r -g mysql mysql
    mkdir /crabank/mysql


    规划目录如下: my.conf 在data 目录下。

    --defaults-file=/db/mysql/data/3306/my.cnf   (mysql 数据文件目录)
    --basedir=/db/mysql/base/                            (mysql 软件安装目录)        
    --datadir=/db/mysql/data/3306/mydata
    --plugin-dir=/db/mysql/base/lib/plugin/
    --log-error=/db/mysql/data/3306/mydata/mysql-error.log
    --pid-file=/db/mysql/data/3306/mydata/mysql.pid
    --socket=/db/mysql/data/3306/mysqltmp/mysql.sock


    mysql主目录处理
    在software目录下移动文件到/usr/local/mysql:

    mv mysql-advanced-5.7.24-linux-glibc2.12-x86_64 /db/mysql
    cd /db/mysql
    mv mysql-advanced-5.7.24-linux-glibc2.12-x86_64 base

    chown -R mysql:mysql /db/mysql
    ##cp /db/db1/mysql/app/bin/mysql /usr/bin/mysql
    cd /db/mysql
    mkdir data

    show variables like '%gtid%';

    edit /db/mysql/data/3306/my.cnf
    gtid_mode=on
    log-bin=mysql-bin
    log-slave-updates=1
    enforce-gtid-consistency=1

    1、在MySQL的生产从库进行mysqlbackup的全备  (这种方式本地备份,好像不会产生锁,但是NBU 备份确会产生锁,数据库HANG,原因未知)

    ##mysqlbackup --login-path=root --socket=/user/my$port/var/mysql.sock --backup-dir=$mybackdir_full ##--backup-image=$mybackdir_full/mybackup.mbi --compress backup-to-image


    mysqlbackup -uroot -p --socket=/db/mysql/data/mysqltmp/mysql.sock --backup-dir=/db/mysql/bak
    --backup-image=/db/mysql/bak/mybackup.mbi --compress backup-to-image

    2、将备份文件拷贝到目标主机
    cd /db/mysql/bak
    scp -rp * root@10.10.227.196:/db/db1/mysql/bak



    #### 感谢 火星人华仔 user.frm,user.MYD,user.MYI https://www.cnblogs.com/shihua513/p/6166200.html

    mkdir /home/mysql
    chown mysql:mysql /home/mysql

    2、将备份文件拷贝到目标主机
    cd /db/mysql/bak
    scp -rp * root@10.10.227.196:/db/db1/mysql/bak

    3、在目标库进行恢复,可以用Mysql,也可以用root

    ##mysqlbackup --defaults-file=$mybackdir_full/backup-my.cnf --datadir=/user/my$port/data ##--backup_image=$mybackdir_full/mybackup.mbi --backup_dir=$mybackdir_full copy-back-and-apply-log --uncompress

    export mybackdir_full=/db/mysql/bak
    ##注意:恢复数据文件目录 --datadir 要写正确,否则会导致 恢复错目录导致 MySQL无法启动:Table mysql.host doesn t exist! 发生错误1067 ,解决。

    ##这个命令貌似换行有问题,只能用notepad 放在一行执行,恢复目录:
    ##一定要cd 到数据文件目录,不然恢复也会报错,
    cd /db/mysql/data/3306/mydata
    mysqlbackup --defaults-file=$mybackdir_full/server-my.cnf --datadir=/db/mysql/data/3306/mydata --backup_image=$mybackdir_full/mybackup.mbi --backup_dir=$mybackdir_full copy-back-and-apply-log --uncompress


    chown -R mysql:mysql mydata


    4、mysql 用户 启动数据库


    --cd /user/mysql/base
    --nohup ./bin/mysqld_safe --defaults-file=/user/my${port}/my.cnf &

    cd /db/mysql/base/
    nohup ./bin/mysqld_safe --defaults-file=/db/mysql/data/3306/my.cnf &

    cp /db/db1/mysql/bak/server-my.cnf /db/db1/mysql/app/my.cnf

    --检查my.cnf
    [mysqld]
    basedir = /db/db1/mysql/app
    datadir = /db/db1/mysql/data/mydata
    log-error = /db/db1/mysql/app/mysql_error.log
    pid-file = /db/db1/mysql/app/mysql.pid
    #user = mysql
    #tmpdir = /tmp
    tmpdir=/db/db1/mysql/data/mydata/tmp
    socket=/db/db1/mysql/data/mysqltmp/mysql.sock
    slow_query_log_file=/db/db1/mysql/data/mydata/mysql-slow.log
    slave_load_tmpdir=/db/db1/mysql/data/mydata/tmp
    plugin_dir=/db/db1/mysql/app/lib/plugin/
    slave_load_tmpdir=/db/db1/mysql/data/mydata/tmp
    bind_address=10.10.227.198
    character_sets_dir=/db/db1/mysql/app/share/charsets/
    general_log_file=/db/db1/mysql/data/mydata/pdb1db02.log
    lc_messages_dir=/db/db1/mysql/app/share/
    log_bin=/db/db1/mysql/data/mydata/mysql-bin
    log_bin_index=/db/db1/mysql/data/mydata/mysql-bin.index
    log_error=/db/db1/mysql/data/mydata/mysql-error.log


    cd /db/db1/mysql/app/
    nohup ./bin/mysqld_safe --defaults-file=/db/db1/mysql/app/my.cnf &

    chown -R mysql:mysql /db/mysql/bak/

    ##感谢 散尽浮华
    ##测试GTID 是否要开了
    "show variables like '%gtid%';"查看
    /db/mysql/app/mysql/my.cnf
    gtid_mode=on
    log-bin=mysql-bin
    log-slave-updates=1
    enforce-gtid-consistency=1

    select INET_ATON('56.18.99.206')
    server_id=180806598

    三、重启
    su - mysql
    mysqladmin -uusername -p shutdown


    /db/mysql/base/bin/mysqld_safe --defaults-file=/db/mysql/data/3306/my.cnf &
    ##mysqld_safe --defaults-file=/**/**/my.cnf &

    show master status;

    ##调整my.cnf文件中的server_id参数,这条命令可以在主库执行,但是IP 用的是从库VIP
    ###通过 server-id 来区分 是否主库 还是 备库
    server-id只需采用ip地址的整数形式如:
    select INET_ATON('10.10.227.198'),server_id=180806598


    show variables like '%server_id%';

    5、为了接续复制需要重新设置gtid_purged,

    运行$mybackdir_full/meta/backup_gtid_executed.sql重置gtid_purged

    --@/db/db1/mysql/bak/meta/backup_gtid_executed.sql

    SET @@GLOBAL.GTID_PURGED='52714855-1870-11e8-bce2-005056bd438d:1-3';


    ####感谢 Payon https://www.jb51.net/article/108726.htm
    #####执行时候报错 : ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

     fix:

    reset master;

    --@/db/db1/mysql/bak/meta/backup_gtid_executed.sql

    SET @@GLOBAL.GTID_PURGED='52714855-1870-11e8-bce2-005056bd438d:1-3';

    6、slave 操作 ,修改MASTER,MASTER_HOST需要设置为生产从库IP

    1).在主库上建立复制账户并授予权限

    ###基于GTID的复制会自动地将没有在从库执行的事务重放, 所以不要在其他从库上建立相同的账号. 如果建立了相同的账户, 有可能造成复制链路的错误.
    ###注意在生产上的密码必须依照相关规范以达到一定的密码强度, 并且规定在从库上的特定网段上才能访问主库.

    因为可能在ZH和SS 同时搭建从库,所以不需要有IP 限制

    create user 'resync'@'%' identified by 'Resync$123';
    grant replication slave on *.* to 'resync'@'%';

    or
    GRANT REPLICATION SLAVE ON *.* TO 'resync'@'%' IDENTIFIED BY 'Resync$123';

    flush privileges;

    select user, host from mysql.user;
    show grants for 'resync'@'56.%';

    ##已有的从库查看 同步的密码
    感谢li 
    1.SHOW SLAVE STATUSG
    master.info
    查看 master.info 位置
    2.Master_Info_File: /crbank/mysql/data/mydata/master.info
    cat /crbank/mysql/data/mydata/master.info 查看密码

    2).从库上配置:
    mysql> show databases;

    CHANGE MASTER TO MASTER_HOST='10.200.210.187', MASTER_USER='resync',Master_Port=3306, MASTER_PASSWORD='Resync$123', MASTER_AUTO_POSITION=1;

    7、RESET SLAVE

    必须reset,否则会报错:ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

    8、START SLAVE

    9、SHOW SLAVE STATUSG
    如下三项值说明同步正常
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0

    当Slave_IO_Running, Slave_SQL_Running为YES,
    且Slave_SQL_Running_State 为Slave has read all relay log; waiting for more updates时表示成功构建复制链路


    从库设置为read-only
    show variables like 'read_only';
    调整前状态
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | read_only | OFF |
    +---------------+-------+

    调整为只读
    set global read_only=on;


    10.mysql> show master status;检查主库状态

    use tmp
    create table tb1 ( id int);
    create table tb2 ( id int, age int, name char(20), primary key(id) );

    12. 数据库名字验证
    show databases;

  • 相关阅读:
    经典的博客有价值的博客
    关于前后端接口的异常的处理
    java重新学习记载的一些资料。
    java重新开始学习
    MFC Socket
    修复 SQLite 数据库文件
    VC++源文件编码
    VC++ 中使用 std::string 转换字符串编码
    Windows代码页、区域
    UTF-7编码
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/12802012.html
Copyright © 2011-2022 走看看