前期准备

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

数据库安装

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

数据库初始化

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



3. 启动 mysql

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

创建用户并赋权

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

主从同步启动

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

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

验证

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

可能出现的问题

  1. 未开启防火墙端口,导致无法通过远程软件访问到数据库,navicat 提示 10038
  1. #开启防火墙 3306 端口
  2. firewall-cmd --zone=public --add-port=3306/tcp --permanent # centos7
  3. firewall-cmd --reload

mysql 一主多从环境搭建(亲测)的更多相关文章

  1. Hadoop 2.7.0模拟分布式实验环境搭建[亲测]

    实验目的: 本实验通过在PC电脑上同时运行3个虚拟机,一个为master节点,两个slave节点.    搭建环境: 主机:mac os 10.10   OS:CenOS 6.5 虚拟机:VMware ...

  2. selenium + python自动化测试环境搭建--亲测

    环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...

  3. mysql同步之otter/canal环境搭建完整详细版

    接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...

  4. Linux+Apache+Mysql+PHP简单的测试环境搭建

    系统版本为:Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x ...

  5. cocos2d-x 3.0 Android环境搭建(亲測通过)

    网上一大堆讲述coco2d-x 3.0 版本号的android环境搭建.真是不忍直視.讲的不清不楚,真是不知道他们自己有没有測试过.今天正好忙完项目有点时间去部署了下android环境. cocos2 ...

  6. centos7.2+jdk7.9搭建haddoop2.7.0伪分布式环境(亲测成功)

    最近想研究下hadoop,玩一玩大数据,废话不多说,就此开始! 所用环境:   xshell 5.0(ssh连接工具,支持ftp,可向虚拟机传文件) CentOS-7-x86_64-DVD-1511. ...

  7. FreeBSD 10安装KDE桌面环境简介(亲测bsdconfig命令有效)

    FreeBSD 10出来一段时间了,自己摸索装上KDE环境,网上介绍的都是10以前版本的,要么对现在的不合适,走了一大圈弯路还是装不好:要么太繁琐且装了一堆无用的软件.本着让更多人能快速方面的入门Fr ...

  8. CentOS 7.4 MySQL 5.7.20主从环境搭建(M-S)

    MySQL主从原理: 一,master记录二进制日志,在每个事务更新数据完成之前,master在二进制日志中记录这些改变.mysql将事务写入二进制日志,即使事务中的语句都是交叉执行的.在事件写入二进 ...

  9. MySQL主从复制以及在本地环境搭建

    MySQL主从复制原理: master(主服务器),slave(从服务器) MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事binary log ...

随机推荐

  1. unity 3d 三、空间与运动

    3D游戏编程第三次作业 简答并用程序验证[建议做] 游戏对象运动的本质是什么? 游戏对象运动的本质是游戏对象Position.Rotate.Scale属性数值的变化. 请用三种方法以上方法,实现物体的 ...

  2. 【题解】一本通例题 S-Nim

    \(\color{purple}{Link}\) \(\text{Solution:}\) 这个题就是给\(Nim\)游戏做了一个限制. 考虑一下\(\text{SG}\)函数:给定的局面下对应的\( ...

  3. 编程体系结构(06):Java面向对象

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础概念 1.面向对象概念 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一 ...

  4. Python自学02day——变量和简单的数据类型

    1.变量是什么? 变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型, ...

  5. Java安全之Commons Collections1分析(三)

    Java安全之Commons Collections1分析(三) 0x00 前言 继续来分析cc链,用了前面几篇文章来铺垫了一些知识.在上篇文章里,其实是硬看代码,并没有去调试.因为一直找不到JDK的 ...

  6. 「Redis」字符串

    原文链接:https://www.changxuan.top/?p=1109 简介 Redis 中自定义的字符串结构. 字符串是 Redis 中最常用的一种数据类型,在 Redis 中专门封装了一个字 ...

  7. git 本地回滚到上一个版本

    linux下是 git reset --hard HEAD^ windows下是 git reset --hard HEAD"^"

  8. day19 Pyhton学习 递归函数

    # 函数的递归 : 在一个函数的内部调用它自己 # import sys # sys.setrecursionlimit(1000000) # 设置递归的最大深度 # 总结 # 1.递归函数的定义 : ...

  9. pytest+allure生成接口自动化测试报告

    准备环境 1.安装pytest pip install pytest -i http://pypi.douban.com/simple pytest-ordering pytest.main([ &q ...

  10. 框架-设备与驱动的拆分及实现-I2C

    目录 前言 笔录草稿 概要 原理及实现方法 IIC 例子实战-驱动 1. 创建文件 2. 创建 I2C 驱动名字列表 3. 组建 I2C 驱动结构体 4. 编写-注册 I2C 驱动函数 5. 创建 I ...