Docker 中如何安装配置MySQL
1、安装docker
1)、移除旧版本的docker:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engin
2)、安装docker
yum install docker
查看是否安装成功
docker version
启动查看docker安装运行状态:
systemctl start docker.service # 开启docker
systemctl enable docker.service # 开机自启动
systemtcl status docker.service # 查看docker的运行状态
2、安装mysql镜像
1)查询mysql的镜像
docker search mysql
2) 安装mysql
docker pull mysql # 安装最新版的mysql
3)查看镜像:
docker images
4) 创建必要的文件夹
cd /opt # 我的软件都安装在/opt目录下。
mkdir mysql_docker
cd mysql_docker/
echo $PWD # 当前位置的绝对路径
3、启动容器
1)启动mysql容器:
docker run --name mysqlserver --privileged=true -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3306:3306 mysql:latest
解释说明:::: # --privileged=true:在docker run中加入 --privileged=true 给容器加上特定权限
# --name mysqlserver :指定容器的名字为mysqlserver
# -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
# -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
# -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
如果发现容器没有正常启动,则记得加上–privileged=true 给容器加上特定权限
2)查看mysql进程:
docker ps
3) 测试mysql登录:
docker exec -it mysqlserver /bin/bash # 也可以把容器名"mysqlserver"改为容器idmysql -uroot -p
-
sql;
select host,user from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; # 修改密码
flush privileges; # 刷新权限。
4)测试远程连接
开放3307端口。
firewall-cmd --zone=public --add-port=3307/tcp --permanent # 开放3307端口
firewall-cmd --reload # 配置立即生效
firewall-cmd --zone=public --list-ports
远程连接。
4、命令总结
1)、日志查看:
docker logs -f --tail 10 a4dac74d48f7 # 容器id可以通过docker ps查看。
2)、查看进程:
docker ps -a # docker ps :查看运行中的进程;-a:查看所有进程,包括不运行的。
3)、关闭docker中的mysql容器
docker stop mysqlserver # mysqlserver可以替换为容器id
4)、重启docker中的mysql容器
docker restart 容器id
5)、重启docker
systemctl restart docker
6)、关闭docker
systemctl stop docker
5、编码问题。
先看个问题,如果你在命令行查询语句中中文显示是这样的,说明你的docker的mysql容器的编码不是utf8,需要修改,下面给出修改的步骤。
mysql> SELECT DISTINCT department FROM student_info;
+-----------------+
| department |
+-----------------+
| ??? |
| ??? |
| ??? |
| ??? |
+-----------------+
4 rows in set (0.01 sec)
1)切换进入容器
docker exec -it mysqlserver /bin/bash # 也可以把容器名"mysqlserver"改为容器id
mysql -uroot -p # 输入密码
2)安装vim
因为可能你的容器没有vim编辑器,无法完成对my.cnf文件的修改。
apt-get update
apt-get install vim -y
3)修改my.cnf文件。
cd /etc/mysql
vim my.cnf
my.cnf的内容为:
[client]
default-character-set=utf8
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
character-set-server=utf8
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
init_connect='SET NAMES utf8'
[mysql]
no-auto-rehash
default-character-set=utf8
替换掉其中utf8字样的内容。
4)重启docker。
docker restart 1c7b4791a069 # 容器id,通过docker ps查看。
5)查看是否修改成功
docker exec -it mysqlserver /bin/bash # 也可以把容器名"mysqlserver"改为容器id
mysql -uroot -p # 输入密码
show variables like 'char%'; # 查看编码
mysql> show variables like 'char%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
成功。
mysql> SELECT DISTINCT department FROM student_info;
+-----------------+
| department |
+-----------------+
| 软件学院 |
| 计算机学院 |
| 材料学院 |
| 生物学院 |
+-----------------+
4 rows in set (0.01 sec)