前言
大家好,又见面了,我是沐风晓月,本文主要讲解如何用docker在centos7.9系统上安装MySQL5.7,以及如何设置MySQL的远程登录。
文章收录到【容器管理】和【数据库入门到精通专栏】,此专栏是沐风晓月对linux云计算架构实战方向的内容进行的总结,希望对你有用。
文章目录
- 前言
- 实验环境
- 一. docker的安装
- 1.1 从阿里下载repo镜像
- 1.2 安装docker
- 1.3 启动docker并查看版本
- 1.4 设置加速
- 二. 安装mysql5.7
- 2.1 查看可用mysql镜像
- 2.2 下载mysql5.7
- 2.3 创建实例并启动
- 2.4 查看并测试
- 2.5 修改mysql的字符编码
- 2.6 远程登录数据库
- 三. python连接mysql案例
- 3.1 查看版本
- 3.2 创建数据库
- 总结
实验环境
- 查看操作系统
[root@mufeng41 ~]# cat /etc/redhat-release
CentOS Linux release 7.9 (Core)
- 查看IP
[root@mufeng41 ~]# ifconfig |grep inet |awk 'NR==1{print $2}'
192.168.1.41
[root@mufeng41 ~]# ifconfig |grep inet|sed -n '1p' |awk '{print $2}'
192.168.1.41
[root@mufeng41 ~]#
一. docker的安装
1.1 从阿里下载repo镜像
[root@mufenggrow ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
这条命令下载完成后,会把repo包放在/etc/yum.repos.d/下
使用命令可以查看到我们的repo包,如果没有,说明没有下载成功:
1.2 安装docker
[root@mufenggrow ~]# yum install docker-ce -y
## 使用yum安装
安装速度可能稍慢,这时候只需要耐心等待完成即可
1.3 启动docker并查看版本
启动docker
[root@mufenggrow ~]# systemctl start docker
查看版本
[root@mufeng41 yum.repos.d]# docker --version
Docker version 24.0.2, build cb74dfc
[root@mufeng41 yum.repos.d]# docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:55:21 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.2
API version: 1.43 (minimum version 1.12)
Go version: go1.20.4
Git commit: 659604f
Built: Thu May 25 21:54:24 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@mufeng41 yum.repos.d]#
1.4 设置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ywrd8tun.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二. 安装mysql5.7
2.1 查看可用mysql镜像
[root@mufeng41 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14230 [OK]
mariadb MariaDB Server is a high performing open sou… 5438 [OK]
percona Percona Server is a fork of the MySQL relati… 615 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 824 [OK]
bitnami/mysql Bitnami MySQL Docker Image 89 [OK]
circleci/mysql MySQL is a widely used, open-source relation… 29
- NAME:镜像的名称或标签。
- DESCRIPTION:对镜像的描述。
- STARS:镜像的星级评分,表示用户对该镜像的关注程度。
- OFFICIAL:是否官方镜像,“[OK]” 表示是官方镜像。 AUTOMATED:是否自动构建的镜像
2.2 下载mysql5.7
[root@mufeng41 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@mufeng41 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 18 months ago 448MB
2.3 创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明:
- -p 3306:3306 将容器的3306端口映射到主机的3306端口
- -v /mydata/mysql/log:/var/log/mysql \ 将日志文件挂载到主机
- -v /mydata/mysql/data:/var/lib/mysql \ 将配置文件挂载到主机
- -v/mydata/mysql/conf:/etc/mysql \ 将配置文件挂载到主机
- -e MYSQL_ROOT_PASSWORD=root \ 设置mysql的密码
2.4 查看并测试
[root@mufeng41 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49f85506f9ea mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
[root@mufeng41 ~]# docker exec -it mysql /bin/bash
root@49f85506f9ea:/# mysql -proot
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
2.5 修改mysql的字符编码
[root@mufeng41 ~]# vim /mydata/mysql/conf/my.cnf
[root@mufeng41 ~]# cat !$
cat /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
这些配置项的含义如下:
- [client] 和 [mysql] 部分指定了客户端的默认字符集为 utf8,确保 MySQL 客户端连接时使用 UTF-8 字符集。
[mysqld] 部分包含了 MySQL 服务器的配置项:
- init_connect 配置项设置了连接建立时要执行的初始 SQL 语句。这里通过两个参数分别设置了连接的字符集和名称为 utf8。
- character-set-server 配置项定义了服务器默认字符集为 utf8。
- collation-server 配置项定义了服务器默认排序规则为 utf8_unicode_ci,即对于 Unicode 字符集使用的排序规则。
- skip-character-set-client-handshake 配置项用于跳过 MySQL 客户端的字符集验证。
- skip-name-resolve 配置项用于禁用反向 DNS 查找,可以提高连接速度。
这些配置项通常用于确保 MySQL 在连接、存储和处理数据时使用适当的字符集和排序规则。
重启生效
[root@mufeng41 ~]# docker restart mysql
mysql
# 设置启动docker的时候就运行mysql
[root@mufeng41 ~]# docker update mysql --restart=always
mysql
2.6 远程登录数据库
[root@mufeng41 ~]# mysql -uroot -proot -h 192.168.1.41
三. python连接mysql案例
3.1 查看版本
import pymysql
#创建connection对象为db
db = pymysql.connect(host="192.168.1.41",port=3306,user="root",passwd="root",db="mysql",charset='utf8')
#创建cursor游标,获取python版本信息
cursor = db.cursor()
#获取mysql版本信息
cursor.execute("select version()")
#将上面的版本结果存放到data中
data = cursor.fetchone()
print(f"版本信息为{data}")
#关闭数据库连接
db.close()
3.2 创建数据库
import pymysql
#创建connection对象为db
db = pymysql.connect(host="192.168.1.41",port=3306,user="root",passwd="root",charset='utf8')
#创建cursor游标
cursor = db.cursor()
#创建数据库
database_name = "aa"
cursor.execute(f"SHOW DATABASES LIKE '{database_name}';")
result = cursor.fetchone()
if result is None:
# 数据库不存在,创建数据库
cursor.execute(f"CREATE DATABASE {database_name}")
print(f"数据库 {database_name} 创建成功")
else:
print(f"数据库 {database_name} 已存在,无需创建")
#将上面的版本结果存放到data中
# 执行查询数据库的操作
cursor.execute("SHOW DATABASES;")
#fetchone表示返回一行
#data = cursor.fetchone()
# fetchall 表示返回所有数据
#data = cursor.fetchall()
#print(f"执行结果:{data}
data = cursor.fetchall()
print("执行结果:")
for row in data:
print(row[0])
#关闭数据库连接
db.close()
总结
以上就是关于centos7.9中使用docker安装mysql5.7的所有内容,有问题记得留言。