前言
前期经过MySQL主从复制之后,发现数据库的读写非常慢,而且经常发生MySQL连接数过小,导致整个数据库崩溃的情况。通过修改MySQL中的 my.cnf 配置文件参数,以达到MySQL关系型数据库最大性能的合理利用。
本文共分为三个方面进行讲述:
一、Docker安装MySQL
查看mysql镜像
sudo docker search mysql
拉取mysql
sudo docker pull mysql
#默认最新版(可自定义5.7)
创建容器,并测试,参考链接
sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
二、连接MySQL
docker中进入mysql容器的方法
1)sudo docker exec -it 容器名称 bash
2)mysql -uroot -p
3)use mysql
4)select host, user from user;查看root用户
判断root是否存在一个,如果有两个先删除delete from user where host="%" and user="root";
再修改 update user set host = '%' where user = 'root';
刷新权限 FLUSH PRIVILEGES;
授予远程权限 alter user 'root'@'%' identified with mysql_native_password by '123456';
三、修改配置文件参数
1.下载完成之后 ,输入 docker ps 查看镜像
2.启动容器:docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql
,docker ps
可以查看状态
3.进入MySQL容器内:docker exec -it 容器名 /bin/bash
(PS:其实这个跟Linux修改文件一样,有好多方法,我用的是最笨的一种。)将本地文件替换容器文件
4.我这里要修改的是MySQL里面的 my.cnf
文件。可先用 ls查看目录文件(PS: ls 命令显示当前目录的内容)
5.tail my.cnf
(PS:tail 命令可用于查看文件的内容)
6.运行 vim 代码
vim /etc/mysql/my.cnf
7.运行上述 vim 代码之后可能会发现没有执行成功,因为docker容器中没有 vim 编辑器,所以要自己安装 vim编辑器(vim 安装方法详情可见文章末尾附录)
8.进入 my.cnf 文件
9.根据自己的需求进行配置增加或者修改,我修改的配置如下(可供参考)
10.附上MySQL数据库性能优化的部分关键参数
关键参数一:back_log
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log 值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。
关键参数二:interactive_timeout
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。
关键参数三:key_buffer_size
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重 写),到你 能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为 402649088(400MB)。
关键参数四:max_connections
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。
关键参数五:record_buffer
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是 131072(128K),我把它改为16773120 (16M)
关键参数六:sort_buffer
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。
关键参数七:table_cache
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64, 我把它改为512。
关键参数八:thread_cache_size
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高 性能可 以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。
关键参数九:wait_timeout
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。
注:参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。
11.修改完成之后使用 :wq 进行保存
12.重新使用 tail 进行查看文件是否正确修改
tail /etc/mysql/my.cnf
13.配置文件修改成功后,就可以尽情地使用MySQL啦!(PS:关系型数据库由于被创造设计初衷的限制,在海量数据处理以及多表函数查询时会遇到 I/O 性能瓶颈。因此具备分布式、高性能、高可靠等特性的非关系型数据库(NoSQL)逐渐被人们所了解并使用,弥补了关系型数据库性能方面的先天性不足,在存储非结构化数据时有巨大优势。主流NoSQL数据库有:Redis、MongoDB和HBase等)
附录
vim 编辑器的下载与安装
在使用 docker容器时,有时候里边没有安装vim,运行vim命令时提示说:vim: command not found,这个时候就需要安装vim,当运行以下安装命令时:
apt-get install vim
Error报错提示:
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package vim
根据 apt 命令下载并安装软件的惯例,我们需要对 apt进行更新!!!
apt-get update
上述命令是为了同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
等更新完毕以后再运行命令:
apt-get install vim
vim /etc/mysql/mysql.conf.d/mysqld.cnf
1.apt-get install vim
2.apt-get update
3.完成 vim 编辑器安装