zoukankan      html  css  js  c++  java
  • mysql主从搭建操作

    1、搭建说明
    准备工作:主从库已安装mysql软件以及xtracbackup备份工具。具体操作可参见mysql rpm安装文档。

    介质 版本
    操作系统 Red Hat Enterprise Linux Server release 6.8 (Santiago)
    数据库 MySQL-5.6.30
    角色 IP
    主库 172.16.81.90
    从库 172.16.81.76
    2、主库操作
    2.1 创建复制用户

    mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.76' IDENTIFIED BY 'repl_1234';
    mysql> flush privileges;


    2.2 开启binlog(若已开启则不需要操作)

    # vi /usr/my.cnf
    #增加以下内容
    [mysqld]
    log-bin=mysqlbin
    expire_logs_days=7



    重启数据库

    # service mysql restart


    2.3主库备份

    创建备份目录
    # mkdir /data/backup/
    全库备份
    # innobackupex --defaults-file=/etc/my.cnf --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock /data/backup/ --no-timestamp 
    单库备份
    # innobackupex --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock --defaults-file=/usr/my.cnf /data/backup/ --no-timestamp --database=wjf
    打包备份,传到从库(临时存放在/tmp目录下)
    # cd /data/
    # tar -cvzf backup_master.tar.gz backup/
    # scp backup_master.tar.gz root@172.16.81.76:/tmp/
    2.4 参数配置
    # vi /usr/my.cnf
    #增加如下内容
    [mysqld]
    server-id=129
    relay-log=mymaster-relay-bin
    # binlog-do-db=wjf
    # binlog-ignore-db=test
    replicate_do_db=wjf
    #replicate-ignore-db=test
    ​
    log-slave-updates=1
    replicate-same-server-id=0
    ​
    master_info_repository=TABLE  
    relay_log_info_repository=TABLE 
    relay_log_purge=1  
    relay_log_recovery=1



    server-id 是必须的,而且需唯一。
    对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(changer master时报错才操作)

    mysql> ues mysql;
    mysql> show tables;
    删除表
    drop table if exists innodb_index_stats;
    drop table if exists innodb_table_stats;
    drop table if exists slave_master_info;
    drop table if exists slave_relay_log_info;
    drop table if exists slave_worker_info;
    进入datadir,删除对应文件
    cd /var/lib/mysql/mysql
    ​
    rm innodb_index_stats.ibd
    rm innodb_table_stats.ibd
    rm slave_master_info.ibd
    rm slave_relay_log_info.ibd
    rm slave_worker_info.ibd
    ​
    重建以上表
    mysql> use mysql;
    mysql> source /usr/share/mysql/mysql_system_tables.sql
    mysql> show tables;
    确认表是否新建成功。
    查看配置
    
    mysql> show master status G;
    3、从库操作
    3.1 备份恢复
    # mkdir /data/
    # mv /tmp/backup_master.tar.gz /data/
    # tar -xvzf backup_master.tar.gz
    # cd /data/backup/
    恢复备份文件至可用状态
    # innobackupex --apply-log --user=root --password=niwodai#2017 --port=3606 /data/backup/
    停止mysql服务
    # service mysql stop
    重命名原datadir目录
    # mv /data/mysql /data/mysql_bak
    恢复数据到datadir
    # innobackupex --copy-back --user=root --password=niwodai#2017 /data/backup/
    170610 18:25:11 completed OK!
    修改恢复后datadir目录权限
    # chown -R mysql:mysql /data/mysql/
    3.2 参数配置
    # vi /etc/my.cnf
    #添加如下配置
    #add for slave
    server-id=230
    log-slave-updates=1
    replicate-same-server-id=0
    ​
    log-bin=myslavebin
    expire-logs-days=7
    relay-log=myslave-relay-bin
    replicate_do_db=wjf
    #replicate-ignore-db=test
    ​
    master_info_repository=TABLE  
    relay_log_info_repository=TABLE 
    relay_log_purge=1  
    relay_log_recovery=1 
    ​
    read-only=1
    对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(若表当前引擎为innodb,可以不操作)
    
    mysql> ues mysql;
    mysql> show tables;
    删除表
    drop table if exists innodb_index_stats;
    drop table if exists innodb_table_stats;
    drop table if exists slave_master_info;
    drop table if exists slave_relay_log_info;
    drop table if exists slave_worker_info;
    进入datadir,删除对应文件
    cd /var/lib/mysql/mysql
    ​
    rm innodb_index_stats.ibd
    rm innodb_table_stats.ibd
    rm slave_master_info.ibd
    rm slave_relay_log_info.ibd
    rm slave_worker_info.ibd
    ​
    重建以上表
    mysql> use mysql;
    mysql> source /usr/share/mysql/mysql_system_tables.sql
    mysql> show tables;
    确认表是否新建成功。
    重启服务器
    
    # service mysql restart
    配置change master to
    
    提取MASTER_LOG_FILE、MASTER_LOG_POS参数。
    # cd /data/backup/
    # more xtrabackup_binlog_info 
    mysqlbin.000004 211678
    ​
    配置
    ​
    mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.90',
    MASTER_USER='repl',
    MASTER_PASSWORD='repl_1234',
    MASTER_LOG_FILE='mysqlbin.000004',
    MASTER_LOG_POS=211678;
    ​
    3.3 启停从库
    启动从库
    mysql> start slave;
    停止从库
    mysql> stop slave;
    从库状态确认
    mysql> show slave status G;
    ​
    ​
    (额外部分)
    从库的IO_thread、sql_thread可以单独启停。命令如下:
    mysql> start slave io_thread;
    mysql> start slave sql_thread;
    4、主从切换
    4.1 切换前状态检查
    #----主库操作
    锁定所有表为只读模式。
    mysql> flush tables with read lock;
    状态查看
    mysql> show processlist;
    传输线程显示Master has sent all binlog to slave; waiting for binlog to be updated
    ​
    #----从库操作
    mysql> show processlist;
    显示Slave has read all relay log; waiting for the slave I/O thread to update it
    4.2 切换
    原从库(81.76)操作
    
    #-----原从库(81.76)操作
    mysql> stop slave;
    mysql> reset master;
    mysql> reset slave all;
    #-----切换后检查
    mysql> show master statusG;
    #-----创建复制用户
    mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.90' IDENTIFIED BY 'replpwd';
    mysql> flush privileges;
    #-----注释掉read_only参数
    # vi /etc/my.cnf
    #read-only=1
    #-------重启数据库
    # service mysql restart
    记录一下两个位置参数,用于主库变从库时的change master to设置。
    
    原主库(81.90)操作
    
    #-------原主库(81.90)操作
    mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.76',
    MASTER_USER='repl',
    MASTER_PASSWORD='replpwd',
    MASTER_LOG_FILE='mysqlbin.000001',
    MASTER_LOG_POS=638;
    #------启动从库
    mysql> start slave;
    #------查看从库状态
    mysql> show slave status;
    #------解锁表
    mysql> unlock tables;
    ​
    若需要设置从库只读,还需要修改/usr/my.cnf文件
    添加参数后重启。
    read-only=1
  • 相关阅读:
    php 基本连接mysql数据库和查询数据
    HTTP/2 简介
    MySQL数据库 utf-8与utf8mb4
    AJAX请求中出现OPTIONS请求
    精力充沛的管理者,要不要“闲”下来?
    【转】微信开发出现“该公众号暂时无法提供服务,请稍后再试”的坑
    Nginx笔记(一):安装
    Tomcat分析
    Redis集群搭建与使用
    微信JS-SDK实现上传图片功能
  • 原文地址:https://www.cnblogs.com/lywJ/p/11146417.html
Copyright © 2011-2022 走看看