前情摘要:项目要上线到内网环境的麒麟V10的测试服务器上,在配置环境的时候,想着用docker跑一个mysql,却种种报错,好在一番折腾后最终得以解决,特此记一次docker安装mysql8
这里主要突出mysql的安装过程,所以前期工作,下载build好mysql.tar传输到服务器上的准备工作默认已经准备好了。
bashsudo mkdir -p /usr/local/mysql/conf
cd /usr/local/mysql/conf
touch my.cnf
bash[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 数据库忽略大小写
lower_case_table_names = 1
#设置3306端口
port=3306
#允许最大连接数
max_connections=1000
#允许连接失败的次数。
max_connect_errors=10
#最大允许包
max_allowed_packet=10M
#服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
collation_server = utf8mb4_general_ci
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# mysql8中“mysql_native_password”插件认证不让用了,改成默认的caching_sha2_password
# mysql8.4 中已经没有default_authentication_plugin变量了,要注释掉
# default_authentication_plugin=caching_sha2_password
检查文件权限,尽量使用root创建,避免一些不必要的权限拒绝问题。
注意:如果您使用已包含数据库的数据目录启动容器,则下面的任何变量都不会产生任何影响:任何预先存在的数据库在容器启动时始终保持不变。即:挂载的数据卷data目录要是空的,否则容易出现错误。
换句话说,就是运行出错了,每次docker run 之前都必须先清除一下/usr/local/mysql/data
的内容,当然你也可以将整个mysql目录都删除掉,重新创建。
bashcd /usr/local/
rm -rf mysql
mkdir mysql
cd mysql
mkdir data
mkdir log
mkdir conf
mkdir mysql-files
dockerdocker run -d -p 3306:3306 \ --restart=always \ --privileged=true \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /usr/local/mysql/mysql-files:/var/lib/mysql-files \ -v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai \ --name mysql mysql:latest
启动成功后,进入容器:
bashdocker exec -it mysql /bin/bash
mysql -u root -p
mysql> use mysql;
mysql> select Host, User, plugin, authentication_string from user;
查询mysql账户,发现已经有root--%账户了,可以直接远程登陆了
如果没有的话,进去授权一下即可
mysqlmysql -u root -p use mysql; # 创建账号 CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '新设置的密码'; # 授权 grant all privileges on *.* to 'root'@'%'; # 刷新权限 FLUSH PRIVILEGES;
然后就可以愉快用navicat远程连接访问啦,注意防火墙问题,看看网络通不通。
本文作者:wjc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC 许可协议。转载请注明出处!