实战3、mysql 启动过程strace -多实例__2018.6.20

要求

1、mysql启动原理

  • 3个参数的区别
  • 启动故障

2、多实例

  • 为什么要使用多实例
  • 多实例启动及关闭的方式
  • 多实例在云平台的使用介绍

一、mysql启动原理

咋看加载配置文件的顺序?
三者区别 mysqld –verbose –help、strace、mysqld –print-defaults

1、3个参数的区别

参数1:mysqld verbose –help**
查看默认的用:

[root@master ~]# /usr/local/mysql3306/bin/mysqld --verbose --help>1.txt
vim 1.txt

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

问题1:defaults-file和–defaults-extra-file的区别?

  • 从含义上来看: –defaults-file只加载指定位置的配置文件,–defaults-extra-file最后加载的配置文件
  • 如果多个配置文件中都重复定义一个变量,后者定义的变量的会覆盖掉前者定义的变量。
  • 多个配置文件的关系,类似于面向对象的 :类的继承

问题2:ibp的分配是128的整数倍吗?
innodb_buffer_pool_size是 分配的128的整数倍

参数2:strace mysqld &
跟踪下mysql的启动:
需要安装strace,yum install -y strace

strace -ttt  /usr/local/mysql3306/bin/mysqld --defaults-file=/etc/my3306.cnf   2>&1  | tee  s1.log

参数3:–print-defaults
/usr/local/mysql3306/bin/mysqld –defaults-file=/etc/my3306.cnf –print-defaults

查看mysqld启动时加载的参数:

这里写图片描述

扩展
pstack,gstack
strace 最后万不得已再用这个
如果卡住了,一般是线程卡住了,
分析系统卡住的原因:
推荐书:linux performance analyse

问题3:errorlog手动删除后,不会创建这个文件了?
做了flush logs后,会把原来的文件句柄释放掉

2、mysql启动故障

可能原因

1、so文件确实 ldd看
2、selinux没关闭
3、权限问题 ll /usr/local/mysql3306/ ll /data/mysql/

初始化失败可能原因:
1、datadir非空
2、磁盘空间不足
3、参数错误(看error.log)

如果启动2个mysqld,kill哪个?
1、如果启动2个mysqld,会造成什么问题?
if。。。ibdata会占用:

2、应该kill掉哪一个:
法1:看pid 文件是谁,保留谁 .
/data/mysql/mysql3306/data/master.pid

法2:看启动时间
ps -eo lstart ,pid,cmd |grep mysqld 可以看到进程的详细启动时间

3、分析故障的方法

查看error.log
把generallog日志打开,查看系统输出
利用mysqld手工启动查看
用strace 追踪下启动过程

启动方式:
/etc/init.d/mysqld start
service mysqld start
(说明:mysqld 来源 :
cp /usr/local/mysql/support-file/mysql.server /etc/init.d/mysqld)
/usr/local/mysql3306/bin/mysqld –defaults-file=/etc/my3306.cnf &

二、多实例

为什么要使用多实例?
1、物理机强劲,单个项目无法把资源使用完
2、资源隔离,减少相互影响
3、分担连接数
4、更充分地利用资源(不同业务错高峰混跑)

mysql不好的
1、内存
2、连接数据处理,
方法1、添加从库,分担连接,
方法2、拆分一个库成多实例

用mysqld 跑多实例

创建个3307的实例

prompt=”\u@\h:\p[\d]>”

修改端口,是为了让mysql读

看配置文件:mysql –help|grep my.cnf
注意
唯一的server-id
唯一的端口
唯一的socket文件
唯一的datadir

优化方面:
内存分配
100G -> 80G
sum(innodb_buffer_pool_size) <= 80G
ulimit -a
max_user_processes 是ulimited最好

open files 65535最好
/etc/secutiry/limits.conf

每个进程只能打开open files 个文件句柄

ulimit -a

socket是 unix domain

练习:
怎么把mysql加到systemctl
怎么用systemctl 管理多实例?

猜你喜欢

转载自blog.csdn.net/ha_123_qq/article/details/80795915