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 # 开启dockersystemctl 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_dockercd 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"改为容器idmysql -uroot -p # 输入密码
2)安装vim
因为可能你的容器没有vim编辑器,无法完成对my.cnf文件的修改。
apt-get updateapt-get install vim -y
3)修改my.cnf文件。
cd /etc/mysqlvim my.cnf
my.cnf的内容为:
[client]default-character-set=utf8[mysqld]pid-file = /var/run/mysqld/mysqld.pidcharacter-set-server=utf8socket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqlsecure-file-priv= NULLinit_connect='SET NAMES utf8'[mysql]no-auto-rehashdefault-character-set=utf8
替换掉其中utf8字样的内容。
4)重启docker。
docker restart 1c7b4791a069 # 容器id,通过docker ps查看。
5)查看是否修改成功
docker exec -it mysqlserver /bin/bash # 也可以把容器名"mysqlserver"改为容器idmysql -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)