MySQL启动与多实例安装
启动方式及故障排查
一、几个问题
1.1 /etc/init.d/mysql 从哪来
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
1.2 mysql能否设置成开机启动
可以,但是没必要
# 方法1:
chkconfig mysql on
# 方法2:
echo "/etc/init.d/mysql start" >> /etc/rc.local
1.3 开机启动?
有没有必要把MySQL设置为开机启动
如果线上库,建议关闭自动启动,线上库本着一个原则,出错了就停下来,用脚本批量启动
1.4 配置文件位置及加载顺序
mysqld可以加载哪些位置的配置文件
mysql global status | grep my.cnf
mysql --help | grep my.cnf
mysqld --verbose --help | grep my.cnf
man mysqld
mysqld --verbose --help | grep defaults-file
--defaults-file=# Only read default options from the given file #.
# my.cnf加载顺序:
# /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
1.5 mysql的启动方式
# 1
/etc/init.d/mysql start
# 2(1与2都是调用的mysql.server)
service mysql start
# 3
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
# 4
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
# mysql.server调用的mysqld_safe
# mysqld_safe调用的mysqld (mysqld_safe是mysqld的守护进程,会自动重启)
# 建议用如下启动方式,一机多实例启动也就简单了
# mysqld_safe启动,mysqld进程挂掉,会自动重启,不便于定位问题
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3376/my3376.cnf &
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3377/my3377.cnf &
# 关闭
/usr/local/mysql/bin/mysqladimn -S /tmp/mysql3376.sock shutdown
二、为什么推荐用mysqld启动
- mysqld_safe是mysqld的守护进程
- 一机多实例启动也就简单了
- mysqld_safe启动,mysqld进程挂掉,会自动重启,不便于定位问题
三、一机多实例
3.1 场景
防止两个业务之间影响,每个业务需要的资源不大,2、3G内存就够了
MySQL随着连接数的上升性能会下降,通过拆分实例降低连接数
不同端口号跑不同的业务
3376->userdb
3377->cmsdb
3.2 技巧,减少误操作
一组MySQL用一个唯一端口号,所有的组之间不要重复
如:一组对应的一主两从
3.3 实现
1. 创建目录
mkdir -p /data/mysql/mysql3377/{data,tmp,logs}
2. 修改配置文件,端口
# cp /data/mysql/mysql3376/mysql3376.cnf /data/mysql/mysql3377/mysql3377.cnf
# cp /etc/my.cnf /data/mysql/mysql3377/mysql3377.cnf
# sed -i 's/3376/3377/g' /data/mysql/mysql3377/mysql3377.cnf
cp /etc/my.cnf /etc/mysql3377.cnf
sed -i 's/3376/3377/g' /etc/mysql3377.cnf
3. 修改权限
sudo chown -R mysql:mysql /data/mysql/mysql3377
4. 初始化,指定配置文件
cd /usr/local/mysql
# ./scripts/mysql_install_db --defaults-file=/data/mysql/mysql3377/mysql3377.cnf
sudo ./scripts/mysql_install_db --defaults-file=/etc/mysql3377.cnf
5. 通过mysqld启动
# mysqld --defaults-file=/data/mysql/mysql3377/mysql3377.cnf &
mysqld --defaults-file=/etc/mysql3377.cnf &
6. 安全加固
mysql -S /tmp/mysql3377.sock
7. 关闭
mysqladimn -S /tmp/mysql3377.sock shutdown
# 可以写成脚本,只需要如下3个参数
port, bp size, appname
$appname$port
四、mysqld_multi
- mysqld_multi是用一个配置文件实现一机多实例
- mysqld_multi可以调用mysqld_safe,也可以调用mysqld
- 如果mysqld_multi,建议调用mysqld_safe
- my.cnf必须在/etc/my.cnf这个位置
- http://www.cnblogs.com/LCX/archive/2010/04/02/1703215.html
4.1 向my.cnf追加如下内容
必须是/etc/my.cnf这默认位置的配置文件
[mysqld_safe]的参数仅供mysqld_safe程序使用
[mysqldN]会覆盖[mysqld]的部分,前缀必须是mysqld
port/datadir/socket必须不能一样
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
# 用来做关闭mysql使用
user = root
# password = 123456
log = /data/mysql/mysqld_multi.log
[mysqld3378]
socket = /tmp/mysql3378.sock
port = 3378
datadir = /data/mysql/mysql3378/data
user = mysql
pid-file = /data/mysql/mysql3378/data/mysql3378.pid
log-error = /data/mysql/mysql3378/logs/error.log
log-bin = /data/mysql/mysql3378/logs/mysql-bin
innodb_data_home_dir = /data/mysql/mysql3378/data
innodb_log_group_home_dir = /data/mysql/mysql3378/logs
[mysqld3379]
socket = /tmp/mysql3379.sock
port = 3379
datadir = /data/mysql/mysql3379/data
user = mysql
pid-file = /data/mysql/mysql3379/data/mysql3379.pid
log-error = /data/mysql/mysql3379/logs/error.log
log-bin = /data/mysql/mysql3379/logs/mysql-bin
innodb_data_home_dir = /data/mysql/mysql3379/data
innodb_log_group_home_dir = /data/mysql/mysql3379/logs
4.2 启动
# 查看MySQL状态
/usr/local/mysql/bin/mysqld_multi report
# 前提是3378和3379的数据库文件已经初始化完了
cd /usr/local/mysql
./scripts/mysql_install_db --defaults-file=/etc/mysql3378.cnf
./scripts/mysql_install_db --defaults-file=/etc/mysql3379.cnf
# 启动,不加参数是启动所有实例
/usr/local/mysql/bin/mysqld_multi start
# 只启动3376,通过端口号指定
/usr/local/mysql/bin/mysqld_multi start 3376
# 关闭,不加参数是关闭所有实例
mysqld_multi stop
mysqld_multi stop 3376
mysqladmin shutdown -S /tmp/mysql3376.sock
4.3 单机跑多实例
# 以下三个绝对不能一样
port
datadir
socket
server-id
五、打包初始化
/data/mysql/mysql3376
# 打包前,删除auto.cnf
rm -rf /data/mysql/mysql3376/auto.cnf
tar -czvf mysqldata.tar.gz /data/mysql/mysql3376
六、故障排查
6.1 看错误日志
# my.cnf定义错误日志的输出
log-error = /data/mysql/mysql3376/logs/error.log
cat /data/mysql/mysql3376/logs/error.log
6.2 字典数据过大
# 数据字典文件
innodb_data_file_path=ibdata1:100M:autoextend
# 不能改大,改小了可以
6.3 ibdata1非常大
ibdata1非常大怎么办?
很有可能是启用了共享表空间,改成独立表空间
共享表空间,就是把数据清理掉后,也不会回收空间
解决:
- dump出来
- 启用独立表空间导入
6.4 优化错误
[mysqld_safe]
malloc-lib = /usr/local/mysql/lib/mysql/libjemalloc.so
用/etc/init.d/mysql和mysqld_safe启,连错误日志都没有写
错误日志是由mysqld来写的,所以连mysqld都没有调用到
解决:
- 把缺少的文件找来编译放进去
- 把这句优化注释掉
6.5 启动mysql的用户
2017-11-18 12:52:04 4766 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
以mysql身份来启动mysql ------不是这个原因
# su - root -c "command"
mysqld --defaults-file=/data/mysql/mysql3377/mysql3377.cnf &
su - mysql -c "mysqld --defaults-file=/data/mysql/mysql3377/mysql3377.cnf &"
my.cnf不要让其他用户有w权限
6.6 设置error_log
error_log必须提前创建好
https://bugs.mysql.com/bug.php?id=84427
6.7 权限错误
/tmp目录权限不对
/tmp是个特殊目录,在日常操作中,该目录会被误操作
iptables
firewalld
selinux
getenforce
七、总结
7.1 问题来源:
目录权限问题
优化问题
7.2 解决思路:
看调用关系
看日志
7.3 要求
- 能按着要求布署一个数据库3378
- 了解几种启动方式的调用关系
- 了解配置文件加载的顺序
- 掌握启动故障的排查思路
- 多实例的布署
MySQL启动与多实例安装的更多相关文章
- MySQL多版本多实例安装启动
多版本,大版本不同测试多实例,一个MySQL5.7.30一个MySQL8.0.20 解压8.0 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar tar ...
- MySQL 5.7 多实例安装部署实例
1. 背景 MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务.各个实例之间是相互独立的,每个实例的dat ...
- mysql一机多实例安装记录
因为想研究mycat,所以需要安装多个mysql实例进行研究.限于没有多于计算机,只能在本机安装了.通过mysql文档,自己琢磨着安装成功! 目录结构如下: 其中one和two文件夹用来模拟数据库分库 ...
- MySQL单机上多实例安装
首先安装mysql,不要启动MySQL,先配置vim /etc/my.cnf.[mysqld_multi]mysqld = /usr/bin/mysqld_safemysqladmin = /usr/ ...
- mysql5.7二进制包进行多实例安装
一.需求 在一台服务器上安装mysql5.7,并且部署两个实例:3306用于本机主库,3307用于其他MYSQL服务器的从库 二.下载mysql二进制包 [root@push-- src]# -lin ...
- MySQL多实例安装、配置、启动(四)
一.规划信息 系统信息: cat /etc/redhat-release CentOS Linux release (Core) # uname -r -.el7.x86_64 数据库规划 PORT: ...
- MySQL多实例安装
1.安装MySQL需要的依赖的包和编译软件 (1)安装MySQL需要的依赖包 安装MySQL之前,最好先安装MySQL需要的依赖包,不然后面会出现报错,还得回来安装MySQL的依赖包. [root ...
- Mysql多实例 安装以及配置
MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...
- Windows下MySQL多实例安装/主从复制/重置密码
Windows创建MySQL多实例 安装MYSQL和实例1 运行mysql-installer-community-5.7.16.0.msi 选择组件 MySQL Server 5.7.16 – X6 ...
随机推荐
- Logistic 回归模型的参数估计为什么不能采用最小二乘法?
logistic回归模型的参数估计问题,是可以用最小二乘方法的思想进行求解的,但和经典的(或者说用在经典线性回归的参数估计问题)最小二乘法不同,是用的是"迭代重加权最小二乘法"(I ...
- ZEGO音视频服务的高可用架构设计与运营
前言: ZEGO 即构科技作为一家实时音视频的提供商,系统稳定性直接影响用户的主观体验,如何保障服务高可用且用户体验最优是行业面临的挑战,本文结合实际业务场景进行思考,介绍 ZEGO 即构在高可用架构 ...
- 从kill-chain的角度检测APT攻击
前言 最近一直在考虑如何结合kill chain检测APT攻击.出发点是因为尽管APT是一种特殊.高级攻击手段,但是它还是会具有攻击的common feature,只要可以把握住共同特征,就能进行检测 ...
- js手机端判断滑动还是点击
网上的代码杂七杂八, 我搞个简单明了的!! 你们直接复制粘贴, 手机上 电脑上 可以直接测试!!! 上图: 上代码: <!DOCTYPE html> <html lang=&q ...
- 142. 环形链表 II
做题思路 or 感想 : 1,这一题用快慢指针来判断是否有环,快慢指针同一起点,速度不同,如果有环,则必定会相遇 2,第二个有意思的点就是数论环节来弄出环入口了,真的太精妙了,但因为我表述能力不好,这 ...
- python2.7安装pyinstaller
python2.7直接安装pyinstaller会报错,版本4与python2不兼容,所以我们安装时需指定兼容的pyinstaller版本号.安装命令如下: pip2 install pyinstal ...
- MySQL 中继日志
什么是中继日志从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件即relay-log日志中,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器 ...
- golang调用海康sdk
git地址:https://gitee.com/mimo431/hcnet-sdk_golang 网络不太流畅,先传gitee上 参考链接: https://www.cnblogs.com/dust9 ...
- 在网站copy时自带的版权小尾巴以及“复制代码“,可以怎么实现
前言 每天网上的博客各个领域都会涌现新文章,有时候看到感兴趣的知识就想把某段文字 copy下来 摘录下来,等有时间后慢慢品味 在部分网站上,如果只是复制少量文字,并没有什么不同.但是当我们复制的文字多 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...