Blog Detail

  • 优化Mysql配置调整内存

    1、查看Mysql版本

    # mysql -V

    示例:

    [root@root /]# mysql -V

    mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrapper

    各个参数含义:

    mysql:表示这是一个MySQL命令。

    Ver 14.14:表示MySQL的版本号是14.14。

    Distrib 5.7.44:表示MySQL的发行版本是5.7.44。

    for Linux (x86_64):表示这个MySQL版本是为Linux操作系统(64位)设计的。

    using EditLine wrapper:表示MySQL使用EditLine作为命令行界面。

    结论:当前Mysql版本是5.7.44

    2、查看MySQL安装路径

    # whereis mysql

    示例:

    [root@root /]# whereis mysql

    mysql: /usr/bin/mysql /usr/lib64/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

    各个参数含义:

    mysql::表示接下来的内容是关于mysql的路径信息。

    /usr/bin/mysql:表示mysql命令行工具的安装路径是/usr/bin/mysql。

    /usr/lib64/mysql:表示mysql库文件的路径是/usr/lib64/mysql。

    /usr/include/mysql:表示mysql头文件的路径是/usr/include/mysql。

    /usr/share/mysql:表示mysql的配置文件的路径是/usr/share/mysql。

    /usr/share/man/man1/mysql.1.gz:表示mysql命令行工具的手册页的路径是/usr/share/man/man1/mysql.1.gz。

    结论:MySQL的安装路径是/usr/lib64/mysql

    3、修改配置优化内存

    3.1、优化前

    当前一台2核2G的服务器,mysql占用内存情况如下:

    top - 13:44:55 up 5 days, 20:22, 1 user, load average: 0.00, 0.01, 0.05

    Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie

    %Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st

    KiB Mem : 1798504 total, 164088 free, 723960 used, 910456 buff/cache

    KiB Swap: 1049596 total, 1049596 free, 0 used. 876948 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    31243 mysql 20 0 1464.1m 198.8m 10.8m S 0.0 11.3 2:08.21 mysqld

    可以看到当前Mysql占用的内存大小是198.8M。

    3.2、优化配置

    3.2.1 、查询配置文件的位置

    通过执行mysqld --verbose --help | grep -A 1 "Default options",可以找到MySQL服务器启动时读取的配置文件路径

    示例:

    [root@root /]# mysql --verbose --help | grep -A 1 "Default options"

    Default options are read from the following files in the given order:

    /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

    各个参数含义:

    /etc/mysql/my.cnf:这是MySQL的默认配置文件路径,通常包含全局配置选项。

    /etc/my.cnf:这是另一个常见的配置文件路径,用于存储全局配置选项。

    ~/.my.cnf:这是用户级别的配置文件路径,可以用于覆盖全局配置选项。

    MySQL会按照上述顺序依次读取这些配置文件,并将它们合并为一个最终的配置。

    如果多个文件中存在相同的配置选项,则后面的文件中的值将覆盖前面的文件中的值。

    结论:这里选择修改/etc/my.cnf文件,因为该文件通常用于存储全局配置选项。

    3.2.2、修改配置文件

    1、修改innodb_buffer_pool_size参数

    这是InnoDB存储引擎的缓冲池大小,它决定了多少数据和索引被缓存在内存中,适当调整这个值可以减少内存使用。

    查看当前的innodb_buffer_pool_size大小:

    mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

    +-------------------------+-----------+

    | Variable_name | Value |

    +-------------------------+-----------+

    | innodb_buffer_pool_size | 134217728 |

    +-------------------------+-----------+

    1 row in set (0.00 sec)

    当前的大小是约128M。

    一般是占用总内存的50-70%,但我目前没什么数据量,所以砍一半,调成64M。

    修改:

    [root@root /]# vim /etc/my.cnf

    [mysqld]

    innodb_buffer_pool_size = 64M

    innodb_log_file_size = 32M

    innodb_log_buffer_size = 8M

    将这三个值的大小都调低了一半。

    2、修改key_buffer_size参数

    key_buffer_size是MySQL中用于缓存MyISAM表索引的参数,我这里基本不用MyISAM,所以这个参数可以调小一点。

    原来默认的是32M,我调整成8M。

    key_buffer_size = 8M

    重启Mysql,让修改生效

    [root@root /]# systemctl restart mysqld

    再次查看当前的innodb_buffer_pool_size大小:

    mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

    +-------------------------+----------+

    | Variable_name | Value |

    +-------------------------+----------+

    | innodb_buffer_pool_size | 67108864 |

    +-------------------------+----------+

    1 row in set (0.00 sec)

    可以看到当前的大小已经调整为64M了。

    3.2、优化后效果

    查看当前mysql的内存占用情况:

    top - 14:53:31 up 5 days, 21:31, 1 user, load average: 0.02, 0.04, 0.05

    Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie

    %Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

    KiB Mem : 1798504 total, 157688 free, 630204 used, 1010612 buff/cache

    KiB Swap: 1049596 total, 1049596 free, 0 used. 970700 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    24890 mysql 20 0 931.5m 124.8m 9.2m S 0.0 7.1 0:00.37 mysqld

    通过top命令可以看到当前mysql的内存占用情况,已经从之前的198M降低到了128M左右。

    内存占比也从之前的11.3%降到了7.1%。

    总结:通过降低innodb_buffer_pool_size和key_buffer_size的值,成功降低了Mysql的内存占用情况,优化成功!!!

    mysql刚安装没多久,配置都是默认的,目前只知道修改innodb_buffer_pool_size和key_buffer_size的值,不知道还有其他参数可以调整。

    等以后知道了,在继续补充完善。