docker安装MySQL

写在前面

安装了docker环境 再来看下如何使用docker安装MySQL。

1:下载镜像

[root@localhost ~]# docker pull mysql:8.0
Trying to pull repository docker.io/library/mysql ... 
8.0: Pulling from docker.io/library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
...
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for docker.io/mysql:8.0
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     8.0                 3218b38490ce        20 months ago       516 MB

2:准备容器使用的本地目录

用于挂载容器数据和配置文件,日志等。

[root@localhost ~]# mkdir -p /usr/local/docker/mydata/mysql/conf
[root@localhost ~]# chmod -R 755  /usr/local/docker/mydata/mysql/

vim /usr/local/docker/mydata/mysql/conf/my.cnf
 
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
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
secure_file_priv=/var/lib/mysql

3:启动容器

[root@localhost ~]# sudo docker run -p 3316:3306 --name mysql -v /usr/local/docker/mydata/mysql/log:/var/log/mysql -v /usr/local/docker/mydata/mysql/data:/var/lib/mysql -v /usr/local/docker/mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
d939e6aed5778a04efdf613df3afe04e7b79aac47260292094fab603c6e375de

本地的3316端口,映射到容器的3306端口。启动成功后查看容器信息:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
d939e6aed577        mysql:8.0           "docker-entrypoint..."   3 seconds ago       Up 2 seconds        33060/tcp, 0.0.0.0:3316->3306/tcp   mysql

如果是docker ps发现没有启动成功,则docker logs mysql查看错误日志,我遇到过如下的错误:

  • chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied
    这种方式是因为cenos7的权限问题,增加--privileged=true即可,此时命令如下:
sudo docker run -p 3316:3306 --name mysql --privileged=true -v /usr/local/docker/mydata/mysql/log:/var/log/mysql -v /usr/local/docker/mydata/mysql/data:/var/lib/mysql -v /usr/local/docker/mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
  • 错误mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
    执行如下命令:
mkdir -p /usr/local/docker/mydata/mysql/mysql-files && chmod -R 755  /usr/local/docker/mydata/mysql/mysql-files

sudo docker run -p 3316:3306 --name mysql --privileged=true -v /usr/local/docker/mydata/mysql/log:/var/log/mysql -v /usr/local/docker/mydata/mysql/data:/var/lib/mysql -v /usr/local/docker/mydata/mysql/conf:/etc/mysql -v /usr/local/docker/mydata/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

增加-v /usr/local/docker/mydata/mysql/mysql-files:/var/lib/mysql-files

4:配置容器

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
d939e6aed577        mysql:8.0           "docker-entrypoint..."   3 seconds ago       Up 2 seconds        33060/tcp, 0.0.0.0:3316->3306/tcp   mysql
[root@localhost ~]# docker exec -it mysql ./bin/bash
root@d939e6aed577:/# mysql -uroot -p
mysql: [Warning] Using a password on the command line interface can be insecure.
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.00 sec)

mysql>  

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';如果是报错ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%',一般是因为mysql.user表中没有user=‘root’,host='%'的记录行,可尝试如下操作:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
...
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.01 sec)

5:外部连接MySQL服务器

C:\Users\Administrator>mysql -h 192.168.64.129 -P 3316 -uroot -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

小黄页 连接:
在这里插入图片描述

写在后面

参考文章列表

Docker安装MySQL 8.0镜像,简易上手

Linux下安装docker环境

chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值