我正在尝试基于官方 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/