云计算--基于docker容器爬虫数据持久化到mysql

背景

1、如何进入启动状态的docker mysql 并使用python代码在其中创建数据表 并插入爬虫获取的数据?

2、忘记container密码,如何从images重新实例化一个?

3、直接在liunx系统当中安装的mysql如何通过.sql文件创建对应的表。

4、由于使用sudo安装的mysql的普通用户没有访问权限。

问题1解决方案:

启动Docker MySQL容器:

首先,确保你已经安装了Docker。

然后,你可以使用以下命令来启动一个MySQL容器(这里使用的是官方MySQL镜像):

bash 复制代码
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

这里some-mysql是容器的名字,MYSQL_ROOT_PASSWORD是MySQL root用户的密码,-d表示后台运行,mysql:tag是Docker Hub上的MySQL镜像和标签,你可以替换为你需要的版本。

等待容器启动:

容器启动后,MySQL服务可能需要一些时间来初始化。你可以使用以下命令检查容器的状态:

shell 复制代码
docker ps

连接到MySQL容器:

你可以使用mysql命令行工具连接到MySQL容器:

shell 复制代码
docker exec -it some-mysql mysql -uroot -p

这将打开一个MySQL shell,提示你输入之前设置的root密码。

创建数据表:

在MySQL shell中,你可以使用SQL语句来创建数据表。例如:

sql 复制代码
CREATE DATABASE my_new_database;
USE my_new_database;
CREATE TABLE symbols (
  ticker VARCHAR(10) NOT NULL,
  instrument VARCHAR(10) NOT NULL,
  name VARCHAR(255) NOT NULL,
  sector VARCHAR(50),
  currency VARCHAR(3),
  created_date DATETIME NOT NULL,
  last_updated_date DATETIME NOT NULL,
  PRIMARY KEY (ticker)
);

使用Python插入数据:

接下来,你可以使用Python脚本来连接到MySQL容器,并插入数据。以下是一个简单的Python脚本示例:

python 复制代码
import mysql.connector
import datetime

# 数据库配置
db_config = {
  'host': 'localhost',
  'user': 'root',
  'password': 'my-secret-pw',
  'database': 'my_new_database'
}

# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()

# 假设你已经有了一个symbols列表,包含了要插入的数据
symbols = [
  ('AAPL', 'stock', 'Apple Inc.', 'Technology', 'USD', datetime.datetime.now(), datetime.datetime.now())
]

# 创建插入数据的SQL语句
insert_stmt = (
  "INSERT INTO symbols (ticker, instrument, name, sector, currency, created_date, last_updated_date) "
  "VALUES (%s, %s, %s, %s, %s, %s, %s)"
)

# 执行插入操作
cursor.executemany(insert_stmt, symbols)
conn.commit()

# 关闭连接
cursor.close()
conn.close()

请注意,你需要根据你的实际情况调整数据库配置和数据。

运行Python脚本:

保存Python脚本,并在宿主机上运行它。确保你的Python环境已经安装了mysql-connector-python或其他MySQL驱动。

以上步骤展示了如何启动Docker中的MySQL服务,并通过Python脚本与之交互。在实际操作中,你可能需要根据具体需求调整数据库配置、数据表结构和Python代码。

问题2解决方案:

如果你忘记了Docker容器的密码,但你可以从原始的Docker镜像重新实例化一个新的容器。以下是如何重新实例化一个Docker容器的步骤:

找到镜像:

首先,你需要确定你想要实例化的容器是基于哪个Docker镜像。你可以使用以下命令列出所有可用的镜像:

shell 复制代码
docker images

运行新容器:

使用docker run命令从镜像启动一个新的容器。你可以指定一个新的环境变量来设置root用户的密码:

shell 复制代码
docker run --name new-mysql-container -e MYSQL_ROOT_PASSWORD=new-password -d mysql:tag

这里new-mysql-container是新容器的名字,MYSQL_ROOT_PASSWORD是新的root密码,-d表示后台运行,mysql:tag是MySQL镜像和标签,你可以替换为你需要的版本。

连接到新容器:

使用以下命令连接到新启动的MySQL容器:

shell 复制代码
docker exec -it new-mysql-container mysql -uroot -p

这将打开一个MySQL shell,并提示你输入新设置的root密码。

数据迁移(如果需要):

如果你需要从旧容器迁移数据到新容器,你可以使用mysqldump工具从旧容器导出数据,然后导入到新容器。首先,找到旧容器的名称:

shell 复制代码
docker ps -a

然后,使用docker exec命令在旧容器中导出数据:

shell 复制代码
docker exec old-mysql-container mysqldump -uroot -p --all-databases > backup.sql

将备份文件复制到宿主机:

shell 复制代码
docker cp old-mysql-container:/backup.sql /path/on/host

然后,将备份文件导入到新容器:

bash 复制代码
docker exec -i new-mysql-container mysql -uroot -p < /path/on/host/backup.sql

更新应用程序配置:

更新你的应用程序配置,使用新的容器名称和密码。

删除旧容器:

如果不再需要旧容器,你可以使用以下命令删除它:

shell 复制代码
docker rm old-mysql-container

请注意,以上步骤假设你有足够的权限来访问Docker守护进程,并且你正在使用root用户。如果你使用的是具有不同权限的用户,可能需要进行相应的调整。此外,如果你的应用程序连接到MySQL容器,确保更新应用程序的数据库连接字符串,以使用新的容器名称或IP地址。

问题3解决方案:

docker是专门针对需要容器化的场景的, 但是如果只是个人使用的话,降低项目部署难度的方法还是直接安装mysql 先进行快速迭代。

在MySQL命令行界面运行.sql文件,您可以按照以下步骤操作:

启动MySQL命令行:

如果您已经处于MySQL命令行界面,您可以跳过这一步。如果没有,请使用以下命令以root用户或其他具有足够权限的用户登录:

bash 复制代码
mysql -u username -p

替换username为您的MySQL用户名,并输入密码。

选择数据库(如果需要):

如果您的.sql文件是针对特定数据库的,您需要先选择该数据库:

bash 复制代码
USE database_name;

将database_name替换为您要操作的数据库名称。

运行.sql文件:

在MySQL命令行中,您可以使用source命令来运行.sql文件。假设您的.sql文件位于您的家目录下,名为schema.sql,您可以使用以下命令:

bash 复制代码
SOURCE ~/path/to/your/schema.sql;

请确保替换~/path/to/your/schema.sql为您的.sql文件的实际路径。

退出MySQL:

完成上述操作后,您可以使用以下命令退出MySQL命令行界面:

bash 复制代码
EXIT;

请注意,.sql文件中的每一条命令都应该是正确的,并且符合您当前MySQL服务器的语法规则。如果文件中包含批处理命令或特定于其他数据库系统的命令,MySQL可能无法正确执行它们。

另外,您提供的.sql文件中包含了几个CREATE TABLE语句,这些语句用于创建数据库表。如果您直接在MySQL命令行界面中运行这些语句,您可以将它们复制并粘贴到命令行中,每条语句后加上分号;来结束命令,然后按回车键执行。如果您想一次性运行多个语句,将它们保存到文件中,然后使用SOURCE命令。

问题4解决方案:

如果您只有使用 sudo 权限才能连接到 MySQL,这意味着普通用户 zhieng 可能没有正确的权限或密码错误。以下是一些解决步骤:

确认密码:

确保您输入的密码是正确的。如果不确定,尝试使用 sudo 登录并重置密码。

使用 sudo 登录 MySQL:

打开终端并使用以下命令以 root 用户身份登录:

bash 复制代码
sudo mysql

检查用户权限:

登录后,检查 zhieng 用户的权限。使用以下 SQL 查询:

bash 复制代码
SELECT user, host FROM mysql.user WHERE user='zhieng';

授予权限:

如果 zhieng 用户不存在或没有适当的权限,授予所有权限:

bash 复制代码
CREATE USER 'zhieng'@'localhost' IDENTIFIED BY 'zhieng_password';
GRANT ALL PRIVILEGES ON *.* TO 'zhieng'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

将 zhieng_password 替换为 zhieng 用户的新密码。

检查 AppArmor 或 SELinux:

如果您的系统使用 AppArmor 或 SELinux,确保没有安全策略阻止普通用户访问 MySQL。

检查 MySQL 配置:

检查 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/ 目录下的配置文件,确保没有错误的配置阻止普通用户连接。

检查错误日志:

查看 MySQL 错误日志(通常位于 /var/log/mysql/error.log),以获取更多关于访问拒绝的信息。

重启 MySQL 服务:

在进行更改后,重启 MySQL 服务以使更改生效:

bash 复制代码
sudo systemctl restart mysql

尝试重新连接:

使用普通用户 zhieng 尝试重新连接 MySQL:

bash 复制代码
mysql -uzhieng -pzhieng_password

考虑使用配置文件:

如果您经常需要以 root 用户身份连接,考虑在 ~/.my.cnf 文件中添加凭证,以便无需每次输入密码:

bash 复制代码
[client]
user=root
password=your_root_password

将 your_root_password 替换为实际的 root 用户密码。

通过上述步骤,您应该能够解决普通用户无法连接 MySQL 的问题。如果问题仍然存在,请提供更多的错误信息或检查系统日志以进一步诊断问题。

相关推荐
芥子沫1 小时前
Docker安装Blossom笔记
笔记·docker·容器
qq7590353662 小时前
docker一键部署网页版Win11系统
运维·docker·容器
Joren的学习记录2 小时前
【Linux运维大神系列】docker详解(三)
linux·运维·docker
孤岛悬城2 小时前
41 Ansible 自动化
云计算
用什么都重名3 小时前
Dify 源码升级指南
docker·容器·dify
java_logo3 小时前
Supabase Postgres Docker 容器化部署指南
运维·docker·postgresql·容器·postgres部署教程·postgres部署文档·docker postgres
weixin_468635293 小时前
用python获取双色球历史数据,纯数据处理,非爬虫
开发语言·爬虫·python
l1t3 小时前
利用docker在windows 11 wsl中安装oracle 12cR2
运维·windows·docker·oracle·容器
孤岛悬城4 小时前
44 Docker:安装与容器管理
docker·容器·云计算
眠りたいです4 小时前
Docker:Docker image常用命令使用及实操
运维·docker·容器·eureka·镜像