考虑到容器化技术的设计和限制,CentOS 7 镜像对 systemd 有一些限制,并不支持直接运行 systemctl。但在 CentOS 7 的镜像中,想要使用 systemctl 启动 mysql 服务,必须要在创建容器的时候添加参数--privileged=true /usr/sbin/init
。
在添加了 /usr/sbin/init 作为启动参数情况下,在启动容器时,会跳转到一个文本模式的登录界面,要求用户登录。这通常是因为这时的 CentOS 7 镜像默认配置为运行一个完整的系统环境,包括登录管理器。
只要想要/usr/sbin/init,就必须接收文本模式的登录界面。
这一问题可能有多种解决方法,比如说设置自动登录,避免弹出登录界面,或者编写一些 Dockerfile 构建支持 systemd 的镜像,也可以直接找一些支持 systemd 的镜像。这里给出一个不需要重新构建镜像的方法。
具体步骤
-
更新并安装必要工具
yum update
yum install -y yum-utils
-
安装mariadb
yum install mariadb-server mariadb
yum install mysql-server mysql
不行,其实只安装了mariadb
-
找 mysqld_safe 位置
find / -name mysqld_safe
,我的在/usr/bin/mysqld_safe
-
安全启动,并查看结果
/usr/bin/mysqld_safe --user=mysql
cat /var/log/mariadb/mariadb.log
-
配置数据库
mysql_install_db --user=mysql
-
查找mysqld
find / -name mysql*
,我的在/usr/libexec/mysqld
-
启动 mariadb 服务
/usr/libexec/mysqld --skip-grant-tables --user=mysql &
-
配置数据库
mysql_secure_installation
。按一般流程安装就可以了 -
之后就可以正常登录了
mysql -u root -p
-
可以创建一个数据库和表测试一下
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO test_table (name, age) VALUES ('Alice', 25);
INSERT INTO test_table (name, age) VALUES ('Bob', 30);
SELECT * FROM test_table;
- 之后每次想开启mysql服务的话,只要再运行
/usr/libexec/mysqld --user=mysql &
就可以了
一些其他的命令
# 关闭mysql服务
mysqladmin -u root -p shutdown
# 查看mysql服务开启情况
ps aux | grep mysqld
#查看是否安装mariadb
yum list installed | grep mariadb