安装MySQL
下载mysql:
官方网站上下载
- 创建一个帐号
groupadd mysql
useradd -g mysql -d /usr/local/mysql -s /sbin/nologin -M mysql
id mysql
- 基本软件安装
mkdir /opt/mysql
cd /opt/mysql
tar zxvf /vagrant/MySQL/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
cd /usr/local/
ln -s /opt/mysql/mysql-5.7.19-linux-glibc2.12-x86_64 mysql
chown -R mysql:mysql mysql/
- 数据库相关的目录创建出来
配置文件:/etc/my.cnf
/data 是一个单独挂载的一个分区
datadir /data/mysql/mysql3306/data
binlog /data/mysql/mysql3306/logs
/data/mysql/mysql3306/tmp
mkdir /data/mysql/mysql3306/{data,logs,tmp} -p
- 初始化
cd /usr/local/mysql
./bin/mysqld --defaults-file=/etc/my.cnf --initialize
5.6,5.5,5.1
./script/mysql_db_install
./bin/mysql_db_install
- 启动
cp support-files/mysql.server /etc/init.d/mysql
/etc/init.d/mysql start
6.连接
cat /data/mysql/mysql3306/data/error.log |grep password 密码位置
#如果出现-bash: mysql: command not found的解决办法
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# mysql -uroot -p
-bash: mysql: command not found
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# source /etc/profile
mysql -S /tmp/mysql3306.sock -p
>alter user user() identified by 'wubxwubx';
- 关闭mysql
/etc/init.d/mysql stop
cd /
chown -R mysql:mysql *
扩展问题 权限修改错误
执行了如下命令怎么修复
chown -R mysql:mysql /*
怎么确认MySQL是否启动
- 进程在不在,是不是你启动的那个进程
- 启动日志,有没有error
- 在测试一下MySQL是不是能连进去
linux环境监察
- 硬件级别的处理
- CPU、内存出厂时都处在节能模式,要调节成高性能模式
- 关闭numa
- Raid卡
- wb,wt的两个区别
- wb直接写到raid cache里后就返回
- wt经过cache写到磁盘返回
- 建议wb force,任何时间都是wb
- 系统级别
- 关闭numa,没在硬件改可以在操作系统关闭,在/boot/grub/grub.conf文件修改
- ulimit
- core file size 打开
- max memory size 设置成unlimited
- open files 调大,建议65535,再大也行
- max user processes 调大
- 网络优化
- 吴老师博客文章:php连接不上mysql问题排查
- http://wubx.net/php-connect-mysql-hy000-2003/
- Swap禁用掉
- IO调度
- SAS盘:deadline
- SSD盘:noop
- 文件系统
- /data 统一xfs
- selinux & iptables 禁用
1、优化ulimit
可以使用ulimit -a查看ulimit的数值
[root@iZ8vbiwiipawb6zekk9elaZ ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3900
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 3900
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@localhost ~]# vim /etc/security/limits.conf
添加如下内容
* soft nofile 204800 #对应open files
* hard nofile 204800 #对应open files
* soft nproc 204800 #对应max user processes
* hard nproc 204800 #对应max user processes
* soft core 4194304 #对应core file size
* hard core 4194304 #对应core file size
1、关闭防火墙
[root@localhost opt]# chkconfig iptables off
[root@localhost opt]# chkconfig --list iptables
iptables 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@localhost opt]# service iptables stop
2、关闭selinux
[root@localhost opt]# vim /etc/sysconfig/selinux
SELINUX=disabled #修改这行
[root@localhost opt]# setenforce 0 #临时关闭
MySQL启动
- 系统自启动
cp /usr/local/mysql/script/mysql.server /etc/init.d/mysql
chkconfig add mysql
/etc/init.d/mysqld start|stop|restart
- 手工方式启动(下面两者为或的关系)
1、/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf/&
2、/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf&
ps:最好不用mysqld_safe启动,原因是mysqld_safe会将mysqld程序异常退出时再新建一个mysqld进程,不利于以后数据库的排查
- MySQL关闭(下面两者为或的关系)
1、/etc/init.d/mysqld stop
2、mysqladmin -S /tmp/mysq3306.sock -p shutdown(多实例用的比较多)
账号安全加固
- 提示:低于5.7版本的加固处理
mysql>delete from mysql.user where user!='root' or host!='localhost';
mysql>truncate mysql.db;
mysql>drop database test;
常见MySQL初始化及启动故障
- so文件依赖缺失
- ldd /usr/local/mysql/bin/mysqld
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# ldd /usr/local/mysql/bin/mysqld
linux-vdso.so.1 => (0x00007ffc614d3000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1102706000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007f1102505000)
libnuma.so.1 => /usr/lib64/libnuma.so.1 (0x00007f11022f9000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f11020c2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f1101ebe000)
librt.so.1 => /lib64/librt.so.1 (0x00007f1101cb5000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f11019af000)
libm.so.6 => /lib64/libm.so.6 (0x00007f110172b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f1101514000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1101180000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1102929000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f1100f7d000)
- 返回的错误码的解读
- /usr/local/mysql/bin/perror 13
[root@iZ8vbiwiipawb6zekk9elaZ mysql]# /usr/local/mysql/bin/perror 13
OS error code 13: Permission denied
- 参数错误
- error.log提示
分析故障方法
- 查看error log
- 打日志打开
- 利用mysqld手工启动查看
- 利用strace一下启动过程
mysql配置文件加载顺序
- 可以利用mysqld --print-defaluts查看加载的参数
[root@iZ8vbiwiipawb6zekk9elaZ ~]# mysqld --verbose --help > id.txt
打开id.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
- 怎么判断用什么配置文件项
- 利用strace跟踪
[root@iZ8vbiwiipawb6zekk9elaZ ~]# strace /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf > strace_mysqld_start.log 2>&1
管理MySQL多实例
-
操作
- 新建一个数据目录,将配置文件复制一份放到数据目录下,将配置文件端口改成你想配置的端口,将server_id按照规则改一下,启动时指定配置文件启动就可以了
-
多实例中端口怎么分配
- 一组(一主多从),同一组数据库的端口号是相同的,每组数据库的端口号都是全网唯一的
-
跑多实例时,需不需要每个实例创建一个用户
- 在云环境下,有资源隔离,做权限收缩,可以每个实例创建一个用户
- 本地企业环境大多数情况都只用一个用户
-
在云环境下
- 每个实例创建一个用户
- 云平台需要考虑支持多版本
- 基本上每个实例都需要有独立的mysqld,一般情况下这个mysqld都是strip后的,体积会小很多,但一般企业用最好不要strip,它会减少很多符号,错误排查会很麻烦
- 利用docker或是lxc做mysql多实例资源隔离
- 存储层使用系统本身的磁盘支持