【centos7】docker部署mysql并连接Navicat

我的环境:

vmware虚拟机

centos7系统

docker已安装

一、拉取MySQL镜像

1、拉取命令

docker pull mysql

2、查看镜像,检查是否拉取成功

docker images

二、创建MySQL容器

1、建立目录映射(一般系统/目录下会有opt,如果没有请新建)

mkdir /opt
mkdir /opt/mysql
mkdir /opt/mysql/conf/
mkdir /opt/mysql/logs/
mkdir /opt/mysql/data/

2、创建my.cnf配置文件

先创建空文件my.cnf
touch /opt/mysql/my.cnf

逐步执行下面操作添加内容
vi my.cnf     进入文件内
按键盘Insert键 进入编辑模式,然后添加内容(就是下面的)

my.cnf添加以下内容

[mysqld]
user=mysql
character-set-server=utf8
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

保存退出

先按键盘Esc键退出编辑模式
:wq           再保存并退出

3.创建容器,并后台启动

#先切换到 / 目录下
cd /

再创建启动容器

docker run --restart=always --privileged=true  \
-v /opt/mysql/data/:/var/lib/mysql \
-v /opt/mysql/logs/:/var/log/mysql \
-v /opt/mysql/conf/:/etc/mysql \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf  \
-p 3306:3306 --name my-mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • -v:主机和容器的目录映射关系,":"前面是主机目录,后面是容器目录

  • --restart=always: 当Docker 重启时,容器会自动启动。

  • --privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

⚠️注意:启动mysql报如下错误,那是因为MYSQL新特性secure_file_priv对读写文件的影响。

ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
 
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2019-09-14T09:52:51.015937Z 0 [ERROR] [MY-010095] [Server] 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
2019-09-14T09:52:51.018328Z 0 [ERROR] [MY-010119] [Server] Aborting
解决问题:
windows下:修改my.ini 在[mysqld]内加入secure_file_priv=/var/lib/mysql
linux下:修改my.cnf 在[mysqld]内加入secure_file_priv=/var/lib/mysql

三、连接MySQL

  1. 进入mysql容器

docker exec -it 90c6f3062ad1 bash
  • 90c6f3062ad1是容器id

  1. 登陆mysql(目前是在mysql容器中使用命令)

cd /                        先切换到/根目录
mysql -u root -p            再登录mysql
  1. mysql 设置允许远程用户访问

先查看我们的数据库

show databases;
【centos7】docker部署mysql并连接Navicat_第1张图片

有四个数据库,我们查询mysql数据库内的user表看一下

select host,user from mysql.user
【centos7】docker部署mysql并连接Navicat_第2张图片

有五条数据。可以看到user=root的已经有%的数据库。所以我不用更改了。

但是如果没有则执行下面语句进行更新

#更新root&&localhost
update mysql.user set host = '%' where user = 'root' and host='localhost'; 

更新完后,再逐步执行下面两个语句

GRANT ALL ON *.* TO 'root'@'%'; # 设置允许远程用户访问

flush privileges;# 刷新权限

最后可以用Navicat连接一下,成功了

【centos7】docker部署mysql并连接Navicat_第3张图片

你可能感兴趣的:(linux,mysql,docker,linux,centos)