mysql启动新实例_MySQL启动与多实例安装

本文介绍了MySQL启动新实例的方法,包括配置文件加载顺序、启动方式以及如何进行一机多实例的部署。推荐使用mysqld直接启动,避免使用mysqld_safe以方便定位问题。此外,文章详细阐述了一机多实例的场景、技巧和实现步骤,并讲解了使用mysqld_multi管理多个实例。同时,还提供了故障排查的常见方法和注意事项。
摘要由CSDN通过智能技术生成

启动方式及故障排查

一、几个问题

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这个位置

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

# 不能改大,改小了可以

20180130_002.png

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必须提前创建好

6.7 权限错误

/tmp目录权限不对

20180130_001.png

/tmp是个特殊目录,在日常操作中,该目录会被误操作

iptables

firewalld

selinux

getenforce

七、总结

7.1 问题来源:

目录权限问题

优化问题

7.2 解决思路:

看调用关系

看日志

7.3 要求

能按着要求布署一个数据库3378

了解几种启动方式的调用关系

了解配置文件加载的顺序

掌握启动故障的排查思路

多实例的布署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值