要求
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 管理多实例?