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启动

  1. mysqld_safe是mysqld的守护进程
  2. 一机多实例启动也就简单了
  3. mysqld_safe启动,mysqld进程挂掉,会自动重启,不便于定位问题

三、一机多实例

3.1 场景

  1. 防止两个业务之间影响,每个业务需要的资源不大,2、3G内存就够了
  2. MySQL随着连接数的上升性能会下降,通过拆分实例降低连接数
  3. 不同端口号跑不同的业务

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

  1. mysqld_multi是用一个配置文件实现一机多实例
  2. mysqld_multi可以调用mysqld_safe,也可以调用mysqld
  3. 如果mysqld_multi,建议调用mysqld_safe
  4. my.cnf必须在/etc/my.cnf这个位置
  5. 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非常大怎么办?

很有可能是启用了共享表空间,改成独立表空间

共享表空间,就是把数据清理掉后,也不会回收空间

解决:

  1. dump出来
  2. 启用独立表空间导入

6.4 优化错误

[mysqld_safe]
malloc-lib = /usr/local/mysql/lib/mysql/libjemalloc.so

用/etc/init.d/mysql和mysqld_safe启,连错误日志都没有写

错误日志是由mysqld来写的,所以连mysqld都没有调用到

解决:

  1. 把缺少的文件找来编译放进去
  2. 把这句优化注释掉

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 要求

  1. 能按着要求布署一个数据库3378
  2. 了解几种启动方式的调用关系
  3. 了解配置文件加载的顺序
  4. 掌握启动故障的排查思路
  5. 多实例的布署

原文地址:https://www.cnblogs.com/okokabcd/p/8476692.html

时间: 2024-07-30 20:39:49

MySQL启动与多实例安装的相关文章

MySQL运维-单实例安装

实验环境系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)软件:mysql-5.5.32,cmake-2.8.8,ncurses-devel-5.7安装方式:源码安装软件存放目录:/opt/softmysql安装目录:/app/mysql服务器ip:192.168.1.50 创建用户 []# groupadd mysql[]# useradd mysql -s /sbin/nologin -M -g mysql 安装依赖软件1,安装

mysql一机多实例安装记录

因为想研究mycat,所以需要安装多个mysql实例进行研究.限于没有多于计算机,只能在本机安装了.通过mysql文档,自己琢磨着安装成功! 目录结构如下: 其中one和two文件夹用来模拟数据库分库. 操作步骤: 拷贝文件 拷贝mysql-5.7.9-win64目录下的my-default.ini分别到whole.one.two目录下,更名为my.init. 以whole库 为例说明,one库和two库做相应调整即可. 1.编写\instance\whole\my.init innodb_bu

MySQL 5.7多实例安装配置

1. 背景描述 a. MySQL多实例概念 简单的说,就是在一台服务器上面开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,这些服务通过不同的socket监听不同的服务端口来提供各自的服务. b. MySQL多实例作用与问题 有效利用服务器资源资源有剩余时,可充分利用剩余的资源提供服务: 节约服务器资源当公司资金紧张,但是服务器又需要各自尽量独立提供服务:而且,需要主从同步技术时,多实例就再好不过了: 资源互相抢占问题当某个服务并发很高或者有慢查询时,整个实例会消耗更

mysql 5.7 多实例安装

服务器上已经有mysql 5.6 在跑,想学习mysql 5.7 新特性,发现安装5.7 时各种坑,所以记录下以防忘记 安装mysql 5.7 groupadd mysql useradd -r -g mysql mysql tar -xf mysql-5.7.9-linux-glibc2.5-x86_64 cp -r mysql-5.7.9-linux-glibc2.5-x86_64 /opt cd /opt ln -sv mysql-5.7.9-linux-glibc2.5-x86_64/

MySQL运维-多实例部署

MySQL多实例是在同一台数据库服务器上,通过开启多个不同的服务端口,并被对应的socket监听,以实现同时运行多个MySQL服务进程的目的. 实验环境使用<MySQL运维-单实例安装>部署成功后的实验环境mysql实例1安装目录:/data/3306mysql实例1数据文件目录:/data/3306/dbfilemysql实例2安装目录:/data/3307mysql实例2数据文件目录:/data/3307/dbfile 停止MySQL []# service mysqld stopShut

mysql 多实例安装启动

这次安装是建立在上次的mysql3306 安装成功的基础上http://liyingdi.blog.51cto.com/6397405/1879993 Tips:之前我们的一个实例是mysql3306,我们现在再安装一个mysql3307 1.和之前一样,创建需要的目录文件夹 mkdir -p /data/mysql/mysql3307/{data,logs,tmp} 创建完 就给文件授权 chown -R mysql:mysql /data/mysql/mysql3307/ 2.进入mysql

linux下mysql多实例安装(转)

转自:http://www.cnblogs.com/xuchenliang/p/6843990.html 1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:: 1.2.MySQL多实例的特点有以下几点 1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务. 2:节约服务器资源 3:资源互相

MySQL多实例安装配置

MySQL多实例安装配置 一.基本概念 MySQL多实例就是,在一台机器上开启多个不同的服务端口(如:3306,3307,3308...),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的端口提供服务. MySQL可以共用一套安全程序,使用不同的my.cnf配置文件,启动程序,数据文件. 逻辑上是独立的,但是一个实例过载过高的时候会对其他造成影响. MySQL多实例的作用与问题: 1.有效利用服务器资源 2.节约服务器资源 3.资源互相抢占问题 当某个服务实现并发生很高的

Windows下MySQL多实例安装/主从复制/重置密码

Windows创建MySQL多实例 安装MYSQL和实例1 运行mysql-installer-community-5.7.16.0.msi 选择组件 MySQL Server 5.7.16 – X64 MySQL Utilities 1.6.4 – X64 MySQL Workbench 6.3.7 – X64 执行安装 配置端口3306 Windows Service Name设置为MYSQL 复制实例 将C:\ProgramData\MySQL\MySQL拷贝为MYSQL1和MYSQL2文