第七节 centos环境使用Docker安装MySQL指南

亮子 2021-06-06 15:04:29 27326 0 0 0

1、检查docker安装情况

systemctl restart docker
docker info
docker --help
docker version

图片alt

2、查找MySQL镜像

docker search mysql

图片alt

3、下载MySQL镜像

docker pull mysql:latest
docker pull centos/mysql-57-centos7

图片alt

4、查看下载的镜像

docker images

图片alt

5、运行镜像

# 运行最新版本
docker run -itd \
--name mysql-test \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 mysql

# 运行特定版本MySQL
docker run -p 3306:3306 \
--name mysql57 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d centos/mysql-57-centos7

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

6、查看运行的容器

# 查看运行的容器
docker ps

7、查看MySQL版本

#
# docker exec -it mysql-test bash
#
docker exec -it c32d9eb1589e bash
mysql --version

图片alt

8、登录MySQL

mysql -uroot -p

图片alt

注意事项:

MYSQL_ROOT_PASSWORD选项的设置,是对root远程登录的设置。而本地的root账号密码则为空。

9、MySQL的安全设置

# 登录mysql
mysql -u root -p

# 修改root账号的密码,不同版本修改密码的SQL语句是不一样的
# select Host,User,authentication_string from user;
ALTER USER 'root'@'localhost' IDENTIFIED BY '521@mazong.com';

# 添加远程登录用户
CREATE USER 'mazong'@'%' IDENTIFIED WITH mysql_native_password BY '521@mazong.com';
GRANT ALL PRIVILEGES ON *.* TO 'mazong'@'%';

# 刷新权限
# flush privileges;
FLUSH PRIVILEGES;

10、设置root用户远程连接

# 增加root用户的远程连接权限并指定密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'

# 更新权限
flush privileges;

11、通过数据库工具连接

通过工具远程连接,可以做如下图设置:

图片alt

如果容器是在阿里云或者其他云服务器上,一般情况下,数据库的端口是不允许对外开放的,在这种情况下,可以使用ssh通道来进行远程连接。如下图的设置:

图片alt

12、处理连接错误

当使用工具连接高版本的数据库,比如MySQL8.0,就有可能出现如下图的错误:

图片alt

Authentication plugin ‘caching_sha2_password’ cannot be loaded
这个错误是由于客户端和服务端对于加密算法不一致导致的,因此通过执行如下命令来保障客户端和服务端密码加密算法一致。

-- 解决认证插件错误
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

13、华为鲲鹏系统安装MySQL

在华为的鲲鹏系统上安装MySQL的镜像稍微有点不同。因为你在官网上无法找到合适的镜像可以下载,但是可以通过直接运行的命令,让docker自动寻找镜像并下载运行。

1)、安装

# 直接下载镜像并创建容器
docker run --name mysqltest -d -p 3306:3306 mysql/mysql-server

2)、运行

-- 设置密码
alter user 'root'@'localhost' identified by '123456';
update user set Host='%' where User='root';
FLUSH PRIVILEGES;

14、把数据存储在本地目录

把数据存储在本地目录,很简单,只需要映射本地目录到容器即可。

1)、默认创建容器

创建容器的命令行,和之前的一模一样,主要是为了拷贝数据目录:

docker run -p 3306:3306 --name mysql57 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d centos/mysql-57-centos7

2)、查看配置容器

# 进入容器
docker exec -it 9fb7c97ee733 /bin/bash

bash-4.2$ cat /etc/my.cnf
[mysqld]

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0

# http://www.percona.com/blog/2008/05/31/dns-achilles-heel-mysql-installation/
skip_name_resolve

!includedir /etc/my.cnf.d


bash-4.2$ cat /etc/my.cnf.d/base.cnf 
[mysqld]
datadir = /var/lib/mysql/data
basedir = /opt/rh/rh-mysql57/root/usr
plugin-dir = /opt/rh/rh-mysql57/root/usr/lib64/mysql/plugin

3)、拷贝配置文件以及数据目录

# 创建相关目录
mkdir -p /server/mysql/config

# 从容器中拷贝配置文件
docker cp 9fb7c97ee733:/etc/my.cnf.d/base.cnf /server/mysql/config/

# 拷贝数据目录
docker cp 9fb7c97ee733:/var/lib/mysql/data/ /server/mysql/

4)、重新创建容器

# 注意:1、不要使用--privileged=true选项
# 注意:2、要停止并删除之前的容器
docker run -p 3306:3306 \
--name mysql571 \
-v /server/mysql/config/my.cnf:/etc/my.cnf \
-v /server/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d centos/mysql-57-centos7

15、防火墙设置

有时候,我们的数据安装到虚拟机里面,这时候需要设置防火墙,我们才能在外网访问。

1)、方法一:开放端口

# 开放端口:
systemctl status firewalld
firewall-cmd  --zone=public --add-port=3306/tcp -permanent
firewall-cmd  --reload

2)、方法二:关闭防火墙

# 关闭防火墙:
sudo systemctl stop firewalld

16、8.0密码的修改方法

因为现在是新版本8.0了 ,老版本的修改密码的语法已不再适用,mysql 5.7.9以后废弃了password字段和password()函数;

新版本的密码修改可以通过如下命令操作:

use mysql;
ALTER user 'root'@'localhost' IDENTIFIED BY 'newpassward'

-- 注意,这里的密码要用包含8位大写+小写+特殊字符+数字的密码
ALTER user 'root'@'%' IDENTIFIED BY 'shenma@521'
FLUSH PRIVILEGES;

图片alt

图片alt