docker安装mysql8.0
用docker安装mysql8.0的步骤,以及注意事项
1、下载镜像文件
docker pull mysql:8.0
2、创建实例并启动
docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -v /mydata/mysql/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ --restart=always -d mysql:8.0 \ --lower_case_table_names=1 参数说明 -p 3306:3306:将容器的3306端口映射到主机的3306端口 -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql/data:/var/lib/mysql\:将mysql产生的数据挂载到主机 -v /mydata/mysql/conf:/etc/mysql\:将配置文件夹挂载到主机 -v /mydata/mysql/mysql-files:/var/lib/mysql-files \ 【mysql8.0需指定 /var/lib/mysql-files的外部目录】 -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码【mysql8.0不生效,可能需手动配置root用户的密码】 -d mysql:8.0:后台运行mysql --lower_case_table_names=1:忽略大小写【linux下mysql默认区分大小写,mysql8及以上版本需在创建mysql时设置,否则无效】 |
(1)若启动失败,且报“Different lower_case_table_names settings for server ('1') and data dictionary ('0')”的错,可能是没有删除mysql旧数据导致,先删除虚拟机中mysql的旧数据再重新启动mysql。
(2)若启动失败,且报“mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)“以及”command was: mysqld --lower_case_table_names=1 --verbose --help --log-bin-index=/tmp/tmp.“的错误,可通过自定义mysql配置文件,再挂载到mysql容器对应目录(/etc/mysql/conf.d/my.cnf)的方式解决此问题,注意须删除之前因为启动失败而产生的mysql挂载的目录及数据;
参考:Docker-安装MySQL8.x,挂载本地数据目录和配置文件(命令详解) (已验证-可行)
docker 安装mysql mysqld: Can‘t read dir of ‘/etc/my.cnf.d‘ (OS errno 2 - No such file or directory) 【待验证】
3、配置mysql8.0远程连接,修改root密码
(1)使用命令登录mysql:
mysql -uroot -p(此命令需要单独输入密码) 或者是mysql -uroot -pXXX 直接跟密码均可
(2)转到mysql 库
use mysql;
(3)查询当前用户可登录的客户端情况:从mysql 库的user表查询
select user,authentication_string,host from user;
可以看到root用户是只允许在localhost登录的,因此我们需要更改他
(4)更新root用户可登录的客户端情况:
update user set host='%' where user='root' and host='localhost' limit 1;
(5)此时root可能没有设置密码(需自行检验),设置root用户密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges; (刷新权限表,使密码生效)
(6)检查忽略大小写配置是否成功:
SHOW GLOBAL VARIABLES LIKE '%lower_case%'
(若 lower_case_file_system 为ON表示大小写不敏感,为OFF表示大小写敏感;
lower_case_table_names 为1表示mysql会先把表名转为小写,再执行操作,为0表示mysql会根据表名直接操作(大小写不敏感))。
更多推荐
所有评论(0)