docker - 如何在基于centos6的docker mysql容器上加载转储?

标签 docker mysql

我正在尝试基于官方 centos6 镜像创建自己的 mysql docker 容器。我成功构建并运行了 mysql 容器。但是,我希望在容器启动时加载转储。现在这正在生成错误:

“错误 1045 (28000):用户 ''@'localhost' 的访问被拒绝”

请帮忙。

构建图像时我有以下配置加载:

#!/bin/bash

# Borrowed from https://github.com/docker-library/docker-mysql

set -e

if [ -z "$(ls -A /var/lib/mysql)" -a -n "$MYSQL_ROOT_PASSWORD" ]; then
        if [ -z "$MYSQL_ROOT_PASSWORD" ]; then
                echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
                echo >&2 '  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
                exit 1
        fi

        scl enable mysql55 "mysql_install_db --user=mysql --datadir=/var/lib/mysql"

        # These statements _must_ be on individual lines, and _must_ end with
        # semicolons (no line breaks or comments are permitted).
        # TODO proper SQL escaping on dat root password D:
        cat > /tmp/mysql-first-time.sql <<-EOSQL
                DELETE FROM mysql.user ;
                CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                GRANT ALL PRIVILEGES  ON *.* TO 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                CREATE USER 'mysql'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                GRANT ALL PRIVILEGES  ON *.* TO 'mysql'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                CREATE USER ''@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                GRANT ALL ON *.* TO ''@'%' IDENTIFIED BY IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                DROP DATABASE IF EXISTS test ;
                commit;
                FLUSH PRIVILEGES ;
        EOSQL

        scl enable mysql55 "mysqld_safe --init-file=/tmp/mysql-first-time.sql &"
        sleep 5
        exec scl enable mysql55 "mysqladmin -uroot -p${MYSQL_ROOT_PASSWORD} shutdown"
fi

chown -R mysql:mysql /var/lib/mysql
exec scl enable mysql55 "mysqld_safe --datadir=/var/lib/mysql --user=mysql"

最佳答案

您似乎正在尝试在以下几行中创建未命名用户:

创建由 '${MYSQL_ROOT_PASSWORD}' 标识的用户 ''@'%' ; 将 *.* 上的所有内容授予由 '${MYSQL_ROOT_PASSWORD}' 标识的 ''@'%' ;

我不知道这在您的 SQL 引擎中是否有效,但我认为它在 MySQL 中不合法。

关于docker - 如何在基于centos6的docker mysql容器上加载转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987064/

相关文章:

php - Mysql PK 和 FK char(36) 与 int(10)

python - 如何在同一个 docker-compose.yml 中连接 2 个 docker 组件

java - 如何使用 SQL 数据库在 JSP 中执行简单的电子邮件/密码验证?

docker - 如何将环境变量传递给 docker-compose up

docker - 通过 API 调用为 DockerHub 存储库创建新的构建规则

mysql - 在间接相关表中的项目之间创建任意 1-1 对应关系

mysql - 尽管我尝试了不同的情况,但我的脚本没有运行

php - 具有 UNIQUE INDEX MySQL 和 NULL 列的重复行

docker - 谷歌容器注册 golang moby 身份验证

docker - 使用 docker 和 nodeJS 构建简单应用程序时如何修复错误 "npm ERR! could not detect node name from path or package"?