centos下使用docker安装mysql5.7,并在本地使用python访问

1、参考

1,Docker 安装MySQL 5.7(超详细文图说明及MySQL配置)

2,docker下安装mysql5.7教程

3,centos7安装mysql5.7步骤(图解版

可以好好看一看参考3,这样才能明白mysql5.7在linux下是如何安装和配置的,可以为docker下使用mysql5.7提供参考,避免一些基础问题

2、安装docker

参考:1,docker官网关于centos下docker安装部分

2, docker配置阿里云镜像加速

3、使用docker安装MySQL5.7,并用python远程访问

1)下载mysql5.7镜像

#dokcer pull 镜像名:版本号
docker pull mysql:5.7.34

2)配置宿主机目录

# 宿主机创建数据存放目录映射到容器
mkdir -p /usr/local/docker_data/mysql/data

# 宿主机创建配置文件目录映射到容器 
mkdir -p /usr/local/docker_data/mysql/conf #(需要在此目录下创建"conf.d"、"mysql.conf.d"两个目录)
mkdir -p /usr/local/docker_data/mysql/conf/conf.d # (在此目录创建my.cnf文件并进行相关MySQL配置)
mkdir -p /usr/local/docker_data/mysql/conf/mysql.conf.d

# 宿主机创建日志目录映射到容器
mkdir -p /usr/local/docker_data/mysql/logs

3)运行mysql5.7

docker run \
--privileged=true \
--name mysql5.7 \
-p 3315:3306 \
-e MYSQL_ROOT_PASSWORD=asd123456 \
-d \
-v /usr/local/docker_data/mysql/data:/var/lib/mysql \
-v /usr/local/docker_data/mysql/conf:/etc/mysql/ \
-v /usr/local/docker_data/mysql/logs:/var/log/mysql \
mysql:5.7.34

参数

说明

--privileged=true

让容器拥有真正的root权限,否则挂载目录会失败

–name mysql5.7

容器名称

-p 3315:3306

端口映射(宿主机端口:容器端口)

-e MYSQL_ROOT_PASSWORD=asd123456

容器的环境变量(root账号初始化密码)

-d

后台运行容器

-v /usr/local/docker_data/mysql/data:/var/lib/mysql

容器MySQL数据目录映射(宿主机:容器)

-v /usr/local/docker_data/mysql/conf:/etc/mysql/

容器MySQL配置目录映射(宿主机:容器)

-v /usr/local/docker_data/mysql/logs:/var/log/mysql

容器MySQL日志目录映射(宿主机:容器)

mysql:5.7.34

指定docker镜像 (可以是镜像名称或者镜像ID)

4)查看mysql5.7运行情况

docker ps
#如果启动失败,可以执行以下命令查看容器运行日志来排查
# docker logs --tail=行数 容器名称
docker logs --tail=100 mysql5.7

5)使用python连接数据库

1,确保服务器安全组开通了3315端口
2,本地基于pycharm的python环境配置参见 windows,pycharm,python,PyMySQL,mysql及应用案例 第2章
如下图所示,链接数据库成功
centos下使用docker安装mysql5.7,并在本地使用python访问_第1张图片

6)进入mysql并创建账号

更多关于mysql权限的资料参考: MySQL查看用户权限及权限管理
docker exec -it mysql5.7 bash
mysql -u root -p
# 创建用户并开启远程登录
CREATE USER 'testaccount'@'%'  IDENTIFIED BY 'jkl123456';
# 创建数据库并设置字符集
CREATE DATABASE `test_database` CHARACTER SET 'utf8mb4';
# 给账号授权数据库
GRANT ALL PRIVILEGES ON test_database.* TO 'testaccount'@'%';
FLUSH PRIVILEGES;

7)使用python创建数据表并访问

centos下使用docker安装mysql5.7,并在本地使用python访问_第2张图片

8)查看数据库存储情况

cd /usr/local/docker_data/mysql/data
ls
#可以看到服务器本地数据库已经建立了

9)禁止root远程访问

首先需要进入docker下的mysql环境
#查看所有用户(用户名、给谁授权)
SELECT user,host FROM mysql.user;

#打印信息如下
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| testaccount   | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
#说明root用户已经有本地访问权限,以及远程连接权限
#需要删除远程连接权限的用户
drop user 'root'@'%';

#再查看
SELECT user,host FROM mysql.user;
#打印信息如下
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| testaccount   | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
#说明root远程连接功能已经删除了

————————更新中.....————————

————以下为过程资料,待整理——————

5.

参考

  1. docker制作mysql5.7镜像详解

  1. mysql官网:如何在Linux下安装mysql

  1. 准备

  1. 重装centos,确保centos环境的干净

  1. centos7下安装MySQL5.7

  1. 参考:centos7安装mysql5.7步骤

  1. 下载mysql5.7,并使用xftp上传至服务器/tool目录下 (注意:有时单独配置xftp无法连接服务器,但是从xshell里面打开xftp则能够连接服务器,如下图)

centos下使用docker安装mysql5.7,并在本地使用python访问_第3张图片
centos下使用docker安装mysql5.7,并在本地使用python访问_第4张图片
  1. 检查系统是否安装过mysql

centos下使用docker安装mysql5.7,并在本地使用python访问_第5张图片
  1. 卸载centos7自带的mariadb

centos下使用docker安装mysql5.7,并在本地使用python访问_第6张图片
  1. 检查有无安装过mysql 用户组,没有的话创建mysql用户和组,用于设置mysql安装目录文件所有者和所属组

1.useradd -r 表示mysql用户是系统用户, 不可用于登录系统
2.useradd -g 表示把mysql用户添加到mysql用户组中
centos下使用docker安装mysql5.7,并在本地使用python访问_第7张图片
  1. 解压mysql压缩包及相关操作

#解压,移动到/mysql/目录下,并重命名为mysql5.7
cd /tool
ls 
tar -zxvf mysql-5.7.41xxx-x86_64.tar.gz
mv mysql-5.7.41xxx-x86_64/ /mysql/mysql5.7
  1. 修改mysql5.7的用户组和权限

#设置/mysql/mysql5.7目录及以下目录的所有者为mysql组的mysql用户
cd /mysql/mysql5.7
chown -R mysql:mysql /mysql/mysql5.7
#设置权限
chmod -R 755 /mysql/mysql5.7
#查看权限
ls -l
  1. 创建必要的文件夹

cd /mysql/mysql5.7
mkdir tmp log data
  1. 安装依赖

yum -y install libaio
  1. 编译安装并初始化mysql,务必记住数据库管理员临时密码,如下图画红色框的部分。

cd /mysql/mysql5.7/bin
#--user 启动mysql的用户 --basedir mysql 的安装目录--datadir mysql数据仓库目录
./mysqld --initialize --user=mysql --basedir=/mysql/mysql5.7 --datadir=/mysql/mysql5.7/data 
centos下使用docker安装mysql5.7,并在本地使用python访问_第8张图片
  1. 编写etc目录下的my.cnf 配置文件,添加配置项,并授权

vi /etc/my.cnf

#以下为my.cnf文件内容
[mysqld]
port = 3306
basedir = /mysql/mysql5.7
datadir = /mysql/mysql5.7/data
#my.conf文件内容结束

#授权
chmod -R 775 /etc/my.cnf
  1. 修改mysql5.7/support-files/目录下的mysql.server文件,将默认的安装位置/usr/local/mysql修改为/mysql/mysql5.7(包括:basedir, datadir, bindir, sbindir,libexecdir,共5项)

cd /mysql/mysql5.7/support-files
vi mysql.server
#修改:basedir, datadir, bindir, sbindir,libexecdir,共5项
  1. 添加软连接,并启动mysql服务

ln -s /mysql/mysql5.7/support-files/mysql.server /etc/init.d/mysql
ln -s /mysql/mysql5.7/bin/mysql /usr/bin/mysql
service mysql start
ps -ef|grep mysql
  1. 登录mysql ,密码就是初始化时生成的临时密码

mysql -u root -p
centos下使用docker安装mysql5.7,并在本地使用python访问_第9张图片
  1. 修改密码为123456

set password for root@localhost = password('123456');
  1. 开放mysql数据库的远程连接

更多关于mysql权限的资料参考: MySQL查看用户权限及权限管理
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
  1. 重启mysql服务,必须重启才能远端连接

#退出mysql环境
exit;
#重启mysql服务
service mysql restart
  1. 设置开机自启动

#将服务文件拷贝到init.d下,并重命名为mysql
cp /mysql/mysql5.7/support-files/mysql.server /etc/init.d/mysqld
#赋予可执行权限
chmod +x /etc/init.d/mysqld
#添加服务
chkconfig --add mysqld
#显示服务列表
chkconfig --list
  1. 开放3306端口

#开放3306端口命令
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#配置立即生效
firewall-cmd --reload
  1. 使用navicat测试本地连接是否成功

centos下使用docker安装mysql5.7,并在本地使用python访问_第10张图片
centos下使用docker安装mysql5.7,并在本地使用python访问_第11张图片
  1. 使用pymysql连接数据库

centos下使用docker安装mysql5.7,并在本地使用python访问_第12张图片
  1. docker安装

远程连接MySQL数据库

  1. 参考:Navicat远程连接MySQL服务器

  1. 参考:免费试用攻略 | Navciat 16 数据库管理工具

  1. 参考

错误处理:
mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 2 - No such file or directory
安装步骤:
Docker下安装mysql超详细步骤
Docker安装并使用Mysql

3、下载MySQL5.7镜像

下载MySQL5.7镜像

docker pull mysql:5.7

查看是否下载完成

docker images

运行MySQL5.7

docker run -d -p 3306:3306 --name mysql -v /mysqldata/mysql/log:/var/log/mysql  -v /mysqldata/mysql/data:/var/lib/mysql  -v /mysqldata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root   mysql:5.7

上述命令的含义:

docker run:在docker中启动一个容器实例

-d:该容器在后台运行

-p 3306:3306:容器与主机映射端口为, 3306(主机端口,即外部连接mysql使用的端口号): 3306(容器端口)

--name mysql:容器运行后的名称

-v /mysqldata/mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /mysqldata/mysql/log目录下

-v /mysqldata/mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下

-v /mysqldata/mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下

-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root

mysql:5.7:需要运行的容器名称以及版本号

通过此处-v 命令备份后,就算当前mysql容器实例被删除,那么再次重启mysql容器后,数据将会自动重主机加载到容器当中

附录:错误处理

附1:mysql容器自动退出

运行如下命令

docker run -d -p 3306:3306 --name mysql -v /mysqldata/mysql/log:/var/log/mysql  -v /mysqldata/mysql/data:/var/lib/mysql  -v /mysqldata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root   mysql:5.7
docker ps

发现mysql容器并未运行,查看log

#获取mysql容器id
docker ps -a
#查看mysql容器log
docker logs mysql容器id

因此错误原因为没有读取到conf.d文件,因此按照参考文件,先

你可能感兴趣的:(docker,mysql,centos)