zoukankan      html  css  js  c++  java
  • 【运维技术】数据库主从同步搭建

    数据库主从同步搭建

    MYSQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力。

    MySQL主从同步的机制

    MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

    MySQL主从同步的作用

    1、可以作为一种备份机制,相当于热备份
    2、可以用来做读写分离,均衡数据库负载

    MySQL主从同步的步骤

    # 主要步骤:
    1. 安装主数据库
    2. 修改root账号密码,root账号远程登录
    3. 安装从数据库
    4. 修改root账号密码,root账号远程登录,密码和主数据库密码相同 
    5. 主数据库修改配置,添加server-id,添加bin-log文件
    6. 主数据库创建同步账号,指定内网ip可以访问,设定同步密码,使用从数据库连接主数据库测试连通性
    7. 主数据库刷新表,锁住所有的表,查看master状态,记录bin-log文件和当前的定位编号
    8. 使用mysqladmin备份数据库,没有数据可以忽略这一步,数据量大的情况下使用mysqldump来备份数据
    9. 从数据库服务器配置server-id,将备份数据导入从服务器。开启binlog等配置
    10. 从数据库修改配置,添加同步账户信息以及bin-log文件和当前的定位编号
    11. 开启同步,主数据库接触锁定。
    

    实际操作

    1. 安装主数据库

    2. 修改root账号密码,root账号远程登录

    3. 安装从数据库

    4. 修改root账号密码,root账号远程登录,密码和主数据库密码相同

    1、2、3、4:单机安装mysql教程

    cd /app
    mkdir mysql
    cd mysql
    # 下载mysql的包,可以使用服务器下载,也可以本地下载,上传到服务器上去
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
    tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
    # 查看冲突版本软件
    rpm -qa | grep redhat-lsb-core
    rpm -qa | grep postfix
    rpm -qa | grep mariadb
    # 卸载冲突版本软件
    rpm -ev redhat-lsb-core-4.1-27.el7.centos.1.x86_64
    rpm -ev postfix-2.10.1-6.el7.x86_64
    rpm -ev mariadb-libs-5.5.56-2.el7.x86_64
    # 安装依赖
    yum install -y net-tools
    yum install -y libaio
    # 安装rpm,一定要按照顺序安装,遇到问题一定要查询问题,不可直接继续安装
    rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
    # 启动mysql
    systemctl start mysqld
    # 查看初始用户密码
    grep password /var/log/mysqld.log
    # 使用mysql账户登录,修改初始化密码
    mysql -p
    # 输入查看的密码
    set password = password("Yingtong@2018!");
    # 允许root用户远程连接
    grant all privileges on *.* to root@'%' identified by 'Yingtong@2018!'; 
    flush privileges;
    # 修改区分大小写的配置
    vim /etc/my.cnf
    # 底部加入配置
    lower_case_table_names=1
    # 重新启动mysql
    systemctl restart mysqld
    # 使用客户端工具连接服务器
    

    5. 主数据库修改配置,添加server-id,添加bin-log文件

    # 编辑,并使用:wq保存
    vim /etc/my.cnf
    # 停止mysql
    systemctl stop mysql
    # 启动mysql
    systemctl start mysql
    # 如果启动遇到问题可有可以查看mysql启动日志,以及systemctl 启动日志
    # mysql日志
    tailf /var/log/mysqld.log
    # 系统日志
    journalctl -xe
    

    配置:/etc/my.cnf配置修改内容(主数据库)

    # 添加serverid,注意必须与从数据库不相同
    server-id=2
    # 开启mysql-bin日志,使用默认数据目录:/var/lib/mysql/,使用其他目录会有问题
    log-bin=/var/lib/mysql/mysql-bin
    # 开始mysql-replay-bin日志,使用默认数据目录
    relay_log = /var/lib/mysql/relay-bin
    # 不区分大小写,项目中有些库使用大写区分,所以服务器上添加这个设定
    lower_case_table_names=1
    

    6. 主数据库创建同步账号,指定内网ip可以访问,设定同步密码,使用从数据库连接主数据库测试连通性

    主数据库:

    # 登录主数据库服务器,输入密码进行登录
    mysql -p
    # 创建同步账号,ip地址为从数据库ip地址,密码自行定义
    GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.48.131' IDENTIFIED BY 'Repl@2018!';
    # 使用户生效
    FLUSH PRIVILEGES;
    

    从数据库:

    # 使用mysql登录
    mysql -urepl -h172.16.48.129 -pRepl@2018!
    # 测试连接情况,成功连接上,说明创建的同步账号没有问题
    

    7. 主数据库刷新表,锁住所有的表,查看master状态,记录bin-log文件和当前的定位编号

    主数据库;

    # 连接主数据库
    mysql -p
    # 锁定数据库
    flush tables with read lock;
    # 查询主数据库信息,记录bin-log文件和坐标
    show master status;
    | File             | Position |
    +------------------+----------+
    | mysql-bin.000007 |      154
    

    8. 使用mysqladmin备份数据库,没有数据可以忽略这一步,数据量大的情况下使用mysqldump来备份数据

    主数据库;

    # 创建备份文件夹目录
    mkdir -p /app/mysqlbackup/
    # 备份出文件,数据量小的情况
    mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases > /app/mysqlbackup/mysql_bak.$(date +%F).sql
    # 备份出文件,数据量大的情况
    mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases | gzip > /app/mysqlbackup/mysql_bak.$(date +%F).sql.gz
    # 从数据库可以使用scp命令进行拷贝
    scp -r root@172.16.48.129:/app/mysqlbackup/mysql_bak.2018-10-21.sql /app/mysqlbackup/
    

    9. 将备份数据导入从服务器。从数据库配置修改和添加,server-id,开启binlog等配置

    导入数据库配置

    # 将备份数据导入从服务器
    mysql -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock < /app/mysqlbackup/mysql_bak.2018-10-21.sql
    # 修改从服务器数据库配置
    vim /etc/my.cnf
    # 重新启动数据库
    systemctl stop mysqld
    systemctl start mysqld
    

    配置:/etc/my.cnf配置修改内容(从数据库)

    # 服务id
    server-id=1
    # 开启mysql-binlog日志
    log_bin = /var/lib/mysql/mysql-bin
    # 开始mysql-relay日志
    relay_log = /var/lib/mysql/relay-bin
    # 设定日志的格式化
    binlog-format = row
    # 设定从库的日志更新
    log-slave-updates = true
    # 设定只读
    read_only = 1
    # 设定数据库不区分大小写
    lower_case_table_names = 1
    

    10. 从数据库修改配置,添加同步账户信息以及bin-log文件和当前的定位编号

    # 从数据库登录mysql
    mysql -p
    # 设定同步账号,输入前面步骤中的mysql的mysql-bin.000007,和坐标154
    CHANGE MASTER TO
    MASTER_HOST='172.16.48.129',
    MASTER_USER='repl',
    MASTER_PASSWORD='Repl@2018!',
    MASTER_LOG_FILE='mysql-bin.000007',
    MASTER_LOG_POS=154
    
    # 开启同步
    start slave;
    # 查看同步状态:其中Slave_IO_Running: YES且Slave_SQL_Running: YES即为成功同步了
    show slave status G
    

    11. 主数据库接触锁定。

    # 主数据库
    mysql -p
    # 解除锁定
    unlock tables;
    

    12. 其他操作

    # 停止数据库同步
    stop salve;
    # 停止同步线程
    STOP SLAVE IO_THREAD
    

    参考网站

    Mysql主从同步(复制)

  • 相关阅读:
    原创:PHP编译安装配置参数说明
    原创 :xftp SFTP子系统申请已拒绝 请确保SSH链接的SFTP子系统设置有效
    原创:LNMP架构部署个人博客网站 禁止转载复制
    原创 :单刷深渊 在Linux中系统安装mysql实战直播
    原创:一键化部署百台服务器级别后端服务器
    原创 :nfs软件服务利用ansible实现一键化部署
    原创: rsync软件服务利用ansible实现一键化部署
    原创:100 台规模集群存储系统搭建及数据实时备份
    原创Couldn't read packet: Connection reset by peer 错误排查思路(推荐)
    原创:Docker在云家政的应用 谢绝复制粘贴内容
  • 原文地址:https://www.cnblogs.com/fly-piglet/p/9842448.html
Copyright © 2011-2022 走看看