开发者问题收集

Docker mysql 使用主机上现有的 /var/lib/mysql

2021-06-16
1153

我想运行一个 Docker 实例来使用主机上 /var/lib/mysql 中保存的现有数据库。

我将所有权更改为 999:999,用于 docker mysql 实例。 然后我运行以下命令来启动实例,但日志显示它无法成功运行。

[root@centos7 ~]# systemctl stop mariadb
[root@centos7 ~]# docker run --name mysql -v /var/lib/mysql:/var/lib/mysql -d mysql:latest
65bb99c11fb3f7d0c2f6c5be3f6f2de2b87d20bed49d83161636de2fa4d257ff
[root@centos7 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@centos7 ~]# docker logs mysql
2021-06-16 03:00:31+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.25-1debian10 started.
2021-06-16 03:00:31+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-06-16 03:00:31+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.25-1debian10 started.
2021-06-16T03:00:32.134878Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.25) starting as process 1
2021-06-16T03:00:32.144828Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory.
2021-06-16T03:00:32.144956Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-06-16T03:00:32.322903Z 1 [ERROR] [MY-012530] [InnoDB] Unknown redo log format (104). Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/ upgrading-downgrading.html.
2021-06-16T03:00:32.323132Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2021-06-16T03:00:32.721498Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
2021-06-16T03:00:32.723771Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2021-06-16T03:00:32.724440Z 0 [ERROR] [MY-010119] [Server] Aborting
2021-06-16T03:00:32.736532Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.25)  MySQL Community Server - GPL.
[root@centos7 ~]# ls -lnd /var/lib/mysql
drwxr-xr-x 6 999 999 290 Jun 16 11:00 /var/lib/mysql
[root@centos7 ~]# docker run --rm -it mysql bash
root@e56e88d268b8:/# grep mysql /etc/passwd
mysql:x:999:999::/home/mysql:/bin/sh
root@e56e88d268b8:/# grep mysql /etc/group
mysql:x:999:
2个回答

我认为这可能是由于您混合使用了 mysql dababasemariadb database 而导致的。

systemctl stop mariadb

以上表示您主机的 /var/lib/mysql 用于 mariadb,而容器运行命令的 mysql:latest 表示您现在正在使用 mysql 作为容器解决方案。

因此,我建议也使用 mariadb 镜像 作为容器,例如

docker run --name mysql -v /var/lib/mysql:/var/lib/mysql -d mariadb
atline
2021-06-16

成功了。感谢 atline。

[root@centos7 ~]# docker exec -it c3b9efb368aa bash root@c3b9efb368aa:/# mysql -u root -p 输入密码: 欢迎使用 MariaDB 监视器。命令以 ; 或 \g 结尾。 您的 MariaDB 连接 ID 为 3

idiot one
2021-06-16