docker容器安装mysql
1.在docker镜像仓库中查找mysql,根据需求安装指定版本(不指定版本默认安装最新版),博客里安装的为mysql-5.7:
docker pull mysql:5.7
查看docker容器的镜像
sudo docker images
创建实例并启动
mysql版本高的话直接跳过当前这个看下一个mysql8.0的配置
docker run -p 3336:3306 --name mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
配置说明
参数说明:
-p 3306:3306: 将容器的3306端口映射到主机的3306端口
-v /data/mysql/conf:/etc/mysql: 将配置文件夹挂载到主机
-v /data/mysql/log:/var/log/mysql: 将日志文件夹挂载到主机
-v /data/mysql/data:/var/lib/mysql: 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root: 初始化root用户的密码
mysql配置
执行
vi /data/mysql/conf/my.cnf
增加如下配置:
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
default-time_zone = '+8:00'
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
mysql 8.0 以上先创建好文件夹然后再加入配置文件,不然会报以下错误
Failed to access directory for --secure-file-priv. Please make sure
that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
创建my.cnf配置文件
touch /mydata/mysql/my.cnf
my.cnf添加如下内容:
[mysqld]
user=mysql
character-set-server=utf8
default-time_zone = ‘+8:00’
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
输入docker命令创建mysql容器
docker run \
--restart=always \
--privileged=true \
-p 8088:3306 --name mysql8-pe \
-v /data/ProductionEnvironment/mysql8/log:/var/log/mysql \
-v /data/ProductionEnvironment/mysql8/data:/var/lib/mysql \
-v /data/ProductionEnvironment/mysql8/my.cnf:/etc/mysql/my.cnf \
-v /data/ProductionEnvironment/mysql8/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0
参数说明:
–restart=always: 当Docker 重启时,容器会自动启动。
–privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-v /mydata/mysql/log:/var/log/mysql 映射日志文件
-v /opt/mysql/data/:/var/lib/mysql 映射数据目录
-v /mydata/mysql/my.cnf:/etc/mysql/my.cnf 映射配置文件
-v /mydata/mysql/conf.d:/etc/mysql/conf.d 映射配置文件
-e MYSQL_ROOT_PASSWORD=123456 映射mysql root用户密码
-d mysql 以后台方式启动
查看运行的容器
docker ps
mysql8.0修改用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
重启mysql容器
docker restart mysql
Navicat等图形管理界面等远程联机云服务器上的数据库
查看正在运行的容器
docker ps
找到mysql5.7的进程号
ps: 进程号不用全部输入,一般输入前三四位就行
docker exec -it 5ac9 bash
进入容器后再进入数据库
输入以下命令
select * from mysql.user \G
会发现Root用户的Host的值为localhost,即仅支持本地连接数据库,不支持从自己的电脑远程连接到云服务器
更改root用户Host的值为 ‘%’使得可以远程访问数据库
update user set Host = '%' where Host = 'localhost' and user = 'root';
或
UPDATE `user` SET `Host` = '10.42.*.*' where `Host` = '10.42.*.*' and user = 'root';
授权用户表,添加远程ip访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.40.21.12' IDENTIFIED BY 'FJay' WITH GRANT OPTION;
更新Mysql配置
flush privileges;