systemctl restart docker
docker info
docker --help
docker version
docker search mysql
docker pull mysql:latest
docker pull centos/mysql-57-centos7
docker images
# 运行最新版本
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
参数说明:
# 查看运行的容器
docker ps
#
# docker exec -it mysql-test bash
#
docker exec -it c32d9eb1589e bash
mysql --version
mysql -uroot -p
注意事项:
MYSQL_ROOT_PASSWORD选项的设置,是对root远程登录的设置。而本地的root账号密码则为空。
# 登录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;
# 增加root用户的远程连接权限并指定密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'
# 更新权限
flush privileges;
通过工具远程连接,可以做如下图设置:
如果容器是在阿里云或者其他云服务器上,一般情况下,数据库的端口是不允许对外开放的,在这种情况下,可以使用ssh通道来进行远程连接。如下图的设置:
当使用工具连接高版本的数据库,比如MySQL8.0,就有可能出现如下图的错误:
Authentication plugin ‘caching_sha2_password’ cannot be loaded
这个错误是由于客户端和服务端对于加密算法不一致导致的,因此通过执行如下命令来保障客户端和服务端密码加密算法一致。
-- 解决认证插件错误
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
在华为的鲲鹏系统上安装MySQL的镜像稍微有点不同。因为你在官网上无法找到合适的镜像可以下载,但是可以通过直接运行的命令,让docker自动寻找镜像并下载运行。
# 直接下载镜像并创建容器
docker run --name mysqltest -d -p 3306:3306 mysql/mysql-server
-- 设置密码
alter user 'root'@'localhost' identified by '123456';
update user set Host='%' where User='root';
FLUSH PRIVILEGES;
把数据存储在本地目录,很简单,只需要映射本地目录到容器即可。
创建容器的命令行,和之前的一模一样,主要是为了拷贝数据目录:
docker run -p 3306:3306 --name mysql57 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d centos/mysql-57-centos7
# 进入容器
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
# 创建相关目录
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/
# 注意: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
有时候,我们的数据安装到虚拟机里面,这时候需要设置防火墙,我们才能在外网访问。
# 开放端口:
systemctl status firewalld
firewall-cmd --zone=public --add-port=3306/tcp -permanent
firewall-cmd --reload
# 关闭防火墙:
sudo systemctl stop firewalld
因为现在是新版本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;