.. _centos7_install_mysql: ========================== CentOS 7 安MySQL ========================== 我在部署 :ref:`django_env_linux` 遇到一个困境,现在安装 :ref:`django_mysql` 环境的 ``mysqlclient`` 始终编译报错。参考MariaDB官方文档 `How to connect Python programs to MariaDB `_ 看来官方已经改为 ``mariadb`` 作为Python的连接器。但是我现在不想改代码,所以我考虑重新安装原生的MySQL服务器来完成这个工作。 - 从MySQL官网获得Repo仓库包(根据不同操作系统): `MySQL Community Downloads: MySQL Yum Repository `_ 安装:: sudo rpm -ivh mysql80-community-release-el7-10.noarch.rpm - 安装:: sudo yum update sudo yum install mysql-server - 对于 :ref:`django_mysql` 还需要安装 ``mysql-devel`` :: sudo yum install mysql-devel - 启动:: sudo systemctl start mysqld 启动错误排查 =============== 我这里遇到一个启动失败的问题: .. literalinclude:: centos7_install_mysql/status_mysqld_start_fail :caption: 启动 ``mysqld`` 失败,执行 ``systemctl status mysqld`` :emphasize-lines: 8,9 .. literalinclude:: centos7_install_mysql/mysqld.log :caption: 检查 ``/var/log/mysqld.log`` 可以看到由于 ``/var/lib/mysql`` 目录非空导致初始化失败 :emphasize-lines: 2-4,7 我检查了一下目录,发现下面是一些证书: .. literalinclude:: centos7_install_mysql/mysql_data_directory_has_files :caption: 在 ``/var/lib/mysql`` 目录下有一些证书文件导致 ``mysqld`` 初始化无法完成 我之前安装过 MariaDB ,我尝试将 ``/var/lib/mysql`` 目录移除(会自动重建),但是依然是同样的报错 我仔细看了 ``/var/log/mysqld.log`` 日志,发现 ``mysqld got signal 11`` 搜索这个信号 ``11`` 表示: 遇到了一个bug。使用的mysql二进制文件或者它所使用的链接库之一已经损坏、构建不当或配置错误。这个错误也可能硬件故障引起,需要尝试手机一些错误诊断信息。由于这是一次崩溃并且肯定有问题,所以信息搜集过程也可能失败。 考虑到我使用的服务器是古老的CentOS 7.2(魔改aliOS),所以我推测是操作系统不兼容导致的问题。具体如何排查,在官方bug中提供了建议: 激活Audit日志来找出哪些查询触发了bug(不过我这里是启动问题,和官方文档中所说的运行时sql查询触发的bug不同) .. note:: 没有时间再折腾了,我最终决定还是将数据库切换到 MariaDB (Django也支持MariaDB 10.4以及更高版本) 参考 ====== - `How To Install MySQL on CentOS 7 `_ - `Bug #96113mysqld got signal 11 `_