zoukankan      html  css  js  c++  java
  • mysql 一主多从环境搭建

    前期准备

    1. 三台服务器,服务器使用的是 centos7
    2. mysql-5.7.24-linux-glibc2.12-x86_64 安装包 使用是版本是 mysql-5.7.24

    数据库安装

    1. 将 mysql 安装包上传到三台服务器上,我使用 FlashFXP 作为上传工具
    2. 解压安装包
      tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 
    
    1. 创建需要安装的路径,之后移动刚才解压的文件夹,同时重命名
      mkdir /app     #创建一个文件夹专门用来存放安装的程序
      mv mysql-5.7.24-linux-glibc2.12-x86_64 /app/mysql  #移动文件并重命名
    
    
    1. 创建用户组、用户、文件夹、赋权
        groupadd mysql                  #创建用户组
        useradd -r -g mysql mysql       #创建用户 -r:建立系统账号 -g:指定用户组
        cd /app/mysql                   #切换到安装目录
        mkdir data                      #创建数据存放目录
        mkdir mysql-log                 #创建日志存放目录
        mkdir mysql-log/err-log
        mkdir mysql-log/slow-log
        mkdir mysql-log/bin-log         #主机需要此目录
        chown -R root:mysql .           #将当前目录以及字母里,所有者改变为 mysql,所属组修改为 mysql
        chown -R mysql:mysql data
        chown -R mysql:mysql mysql-log
    
    1. 配置 /etc/my.cnf
        vi /etc/my.cnf
    
    • 主机配置文件:
    [mysqld]
    port = 3306                             #端口
    basedir = /app/mysql                    #mysql安装路径
    datadir = /app/mysql/data/              #mysql数据存放路径
        
    #日志设置
    log-error = /app/mysql/mysql-log/err-log/db-err.log   #错误日志路径
    slow-query-log-file = /app/mysql/mysql-log/slow-log/db-slow.log  #慢SQL日志路径
    long-query-time = 3 #怎样才算是慢sql,单位是秒
    
    #开启 binlog 同步
    server_id = 0001                  #一个集群内的 MySQL 服务器 ID,全局唯一
    log-bin = /app/mysql/mysql-log/bin-log/db-binlog      #开启 Binlog 并写明存放日志的位置
    max-binlog-cache_size = 64M       #binlog 最大能够使用cache的内存大小
    max-binlog-size = 1G              #binlog 日志每达到设定大小后,会使用新的 binlog 日志
    expire_logs_days = 15             #只保留最近15天的日志
    binlog-format = mixed             #混合模式复制
    innodb_flush_log_at_trx_commit = 2 #和 sync_binlog 控制MySQL磁盘写入策略以及数据安全性
    sync-binlog = 500                  #控制数据库的binlog刷到磁盘上去
    
    #性能调优配置
    innodb_buffer_pool_size = 24576M   
    max_connections = 5000
    max_connect_errors = 6000
    external-locking = FALSE
    max_allowed_packet = 64M
    join_buffer_size = 64M
    sort_buffer_size = 2M
    read_rnd_buffer_size = 16M 
    
    #SQL模式
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    
    • 从机配置文件:
    [mysqld]
    basedir = /app/mysql
    datadir = /app/mysql/data
    port = 3306
    server_id = 0002 #这里需要在集群中保持唯一
        
    #日志设置
    expire_logs_days = 15
    long-query-time = 3
    slow-query-log-file=/app/mysql/mysql-log/slow-log/db-slow.log
    log-error=/app/mysql/mysql-log/err-log/db-err.log
        
    #主从设置
    replicate-do-db=db_test     #需要从主库同步的数据库1
    replicate-do-db=db_dev      #需要从主库同步的数据库2
    read_only=1                 #只读设置
        
    #性能调优设置
    innodb_buffer_pool_size = 24576M
    max_connections = 5000
    max_connect_errors = 6000
    external-locking = FALSE
    max_allowed_packet = 64M
    join_buffer_size = 64M
    sort_buffer_size = 2M
    read_rnd_buffer_size = 16M 
        
    #SQL模式
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    
    1. 设置链接和服务
        cp /app/mysql/support-files/mysql.server /etc/init.d/mysql  # 可以使用service mysql start
        ln -s  /app/mysql/bin/mysql /usr/bin         #任何路径可以使用 mysql 命令
    

    数据库初始化

    1. 初始化数据库
        cd /app/mysql/bin/
        ./mysqld --defaults-file=/etc/my.cnf  --user=mysql --initialize  #初始化
    
    1. 查看密码(初始化数据库之后会生成一个 root 账户的默认密码)
        cat /app/mysql/mysql-log/err-log/db-err.log
    


    3. 启动 mysql

        service mysql start
    
    1. 登录并修改 root 密码
        mysql -u root -p 
        set password = password('root');
        flush privileges;
        
        #如果需要 root 远程连接,执行以下语句
        use mysql;
        update user set host = '%' where user = 'root';
        flush privileges;
    

    创建用户并赋权

    • 主机
        #需要创建用于和从机“通信”的用户,具有同步权限,后续操作需要 
        grant replication slave on *.* to 'copy'@'%' identified by 'copy';
        flush privileges;
        
        #主机可以创建一个用户用于访问和操作某些特定的库,不应该让应用直接使用 root 用户. 这里的 db_test 是创建的一个测试库
        grant all privileges  on db_test.* to "app_user"@'%' identified by "app_user";
        flush privileges;
    
    • 从机
        #需要创建用于“只读”权限的用户
        grant select on db_test.* to 'readonly'@'%' identified by "readonly";
        flush privileges;
    

    主从同步启动

    • 主机
        #获得 master 二进制日志文件名及位置
        show master status
    

    • 从机
        stop slave;     #暂停
        reset slave;    #重置
        change master to master_host="主机IP", master_user="copy",master_password="copy",master_log_file="db-binlog.000002",master_log_pos=2532; #设置和主机同步的用户信息,日志文件信息
        start slave;    #启动
        show slave status G #查看从机状态,主要是看 Slave_IO_Running Slave_SQL_Running 上是否都是 yes
    

    验证

    1. 主机和从机都创建数据库 db_test
        create database db_test
    
    1. 主机数据库新增表和数据,验证从机是否同步成功

    可能出现的问题

    1. 未开启防火墙端口,导致无法通过远程软件访问到数据库,navicat 提示 10038
        #开启防火墙 3306 端口
        firewall-cmd --zone=public --add-port=3306/tcp --permanent # centos7
        firewall-cmd --reload
    
    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    文件过滤驱动隐藏目标文件
    POJ 3345 Bribing FIPA(树形DP)
    POJ 1018 Communication System(分组背包DP)
    无用的,ring0暴力枚举进程模块
    HDOJ 3496 Watch The Movie(基本二维背包)
    栈回溯法的一个例子
    代码这样写奇丑无比...编码前期要做好规划工作啊
    多核发dpc安全inline hook
    纵我不往,知识不来学习Java第一周心得
    对“TD信息树”的使用体验
  • 原文地址:https://www.cnblogs.com/shulipeng/p/12837609.html
Copyright © 2011-2022 走看看