mysql 一主多从环境搭建(亲测)
前期准备
- 三台服务器,服务器使用的是 centos7
- mysql-5.7.24-linux-glibc2.12-x86_64 安装包 使用是版本是 mysql-5.7.24
数据库安装
- 将 mysql 安装包上传到三台服务器上,我使用 FlashFXP 作为上传工具
- 解压安装包
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
- 创建需要安装的路径,之后移动刚才解压的文件夹,同时重命名
mkdir /app #创建一个文件夹专门用来存放安装的程序
mv mysql-5.7.24-linux-glibc2.12-x86_64 /app/mysql #移动文件并重命名
- 创建用户组、用户、文件夹、赋权
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
- 配置 /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
- 设置链接和服务
cp /app/mysql/support-files/mysql.server /etc/init.d/mysql # 可以使用service mysql start
ln -s /app/mysql/bin/mysql /usr/bin #任何路径可以使用 mysql 命令
数据库初始化
- 初始化数据库
cd /app/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize #初始化
- 查看密码(初始化数据库之后会生成一个 root 账户的默认密码)
cat /app/mysql/mysql-log/err-log/db-err.log

3. 启动 mysql
service mysql start
- 登录并修改 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

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

可能出现的问题
- 未开启防火墙端口,导致无法通过远程软件访问到数据库,navicat 提示 10038
#开启防火墙 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent # centos7
firewall-cmd --reload
mysql 一主多从环境搭建(亲测)的更多相关文章
- Hadoop 2.7.0模拟分布式实验环境搭建[亲测]
实验目的: 本实验通过在PC电脑上同时运行3个虚拟机,一个为master节点,两个slave节点. 搭建环境: 主机:mac os 10.10 OS:CenOS 6.5 虚拟机:VMware ...
- selenium + python自动化测试环境搭建--亲测
环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...
- mysql同步之otter/canal环境搭建完整详细版
接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...
- 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 ...
- cocos2d-x 3.0 Android环境搭建(亲測通过)
网上一大堆讲述coco2d-x 3.0 版本号的android环境搭建.真是不忍直視.讲的不清不楚,真是不知道他们自己有没有測试过.今天正好忙完项目有点时间去部署了下android环境. cocos2 ...
- centos7.2+jdk7.9搭建haddoop2.7.0伪分布式环境(亲测成功)
最近想研究下hadoop,玩一玩大数据,废话不多说,就此开始! 所用环境: xshell 5.0(ssh连接工具,支持ftp,可向虚拟机传文件) CentOS-7-x86_64-DVD-1511. ...
- FreeBSD 10安装KDE桌面环境简介(亲测bsdconfig命令有效)
FreeBSD 10出来一段时间了,自己摸索装上KDE环境,网上介绍的都是10以前版本的,要么对现在的不合适,走了一大圈弯路还是装不好:要么太繁琐且装了一堆无用的软件.本着让更多人能快速方面的入门Fr ...
- CentOS 7.4 MySQL 5.7.20主从环境搭建(M-S)
MySQL主从原理: 一,master记录二进制日志,在每个事务更新数据完成之前,master在二进制日志中记录这些改变.mysql将事务写入二进制日志,即使事务中的语句都是交叉执行的.在事件写入二进 ...
- MySQL主从复制以及在本地环境搭建
MySQL主从复制原理: master(主服务器),slave(从服务器) MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事binary log ...
随机推荐
- makefile实验一 make的基本原则、伪目标、以及不使用.PHONY确实现和伪目标一样功能的一种方法
target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标 ...
- spring-boot-route(五)整合Swagger生成接口文档
目前,大多数公司都采用了前后端分离的开发模式,为了解决前后端人员的沟通问题,后端人员在开发接口的时候会选择使用swagger2来生成对应的接口文档,swagger2提供了强大的页面调试功能,这样可以有 ...
- 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源(二)
之前写过一篇 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源,在那之后,又陆续想到并实施了几点利用 jsDelivr 进一步加速静态资源加载的措施,新起一篇作为记录和分享. ...
- Android和。net加密。
来源: Github: https://github.com/Pavel-Durov/CodeProject-Android-and-NET-Encryption 直接: Source Code (A ...
- 配置DVWA漏洞环境
web萌新,因为在别人的环境上练习总有点不舒服,所以在本地搭建了网站:下面记录一下搭建的步骤 DVWA:是一个漏洞环境包,可以用phpstudy或者wamp解析:所以要想配置这个环境,就必须有这两个软 ...
- Microsoft.VisualBasic.dll内置的判断变量类型的一系列实用方法
今天意外读到一线码农的一篇文章<挖一挖C#中那些我们不常用的东西之系列(2)--IsXXX 系列方法>,文章中讲到 Microsoft.VisualBasic.dll 里面的Informa ...
- IDEA设置maven修改settings.xml配置文件无法加载仓库
作为初学者配置maven一般网上搜索.然后你就看到各种配置文件片段,首先配置镜像,然后配置仓库.完事后再IDEA里面配置下maven的路径和配置文件路径. 这些文章属实坑爹,完全没讲一个重要的配置就是 ...
- 晋城6397.7539(薇)xiaojie:晋城哪里有xiaomei
晋城哪里有小姐服务大保健[微信:6397.7539倩儿小妹[晋城叫小姐服务√o服务微信:6397.7539倩儿小妹[晋城叫小姐服务][十微信:6397.7539倩儿小妹][晋城叫小姐包夜服务][十微信 ...
- JS关闭chorme页面
百度到的很多答案都失效了,这是收集一位博主的(https://www.jianshu.com/p/9dc2752194b8),目前可以使用. 代价是打开一个空白页面,能实现无提示关闭当前页面.不需要是 ...
- nginx优化:使用expires在浏览器端缓存静态文件
一,nginx中expires指令的作用 网站的图片等静态文件一旦发布,通常很少改动, 为了减小对服务器请求的压力,提高用户浏览速度, 我们可以设置nginx中的expires, 使用户访问一次后,将 ...