Ubuntu的Mysql设置

MySQL安装

解决密钥问题

获取并安装最新的 MySQL GPG 密钥

首先需要下载并导入 MySQL 官方最新的 GPG 签名密钥,执行以下命令:

1
wget -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | sudo gpg --dearmor -o /usr/share/keyrings/mysql.gpg

或者

1
wget -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | sudo gpg --dearmor -o /usr/share/keyrings/mysql.gpg

然后需要修改 MySQL 的源列表文件(通常是/etc/apt/sources.list.d/mysql.list),将密钥引用改为新的 keyring 文件,例如将原文件中的deb https://repo.mysql.com/apt/ubuntu/ noble mysql-8.0改为:如果提示这个不能使用,那么直接删除掉,尝试使用ubuntu官方提供的软件源更新,先查看该目录下是否有mysql.list ,有就先备份

date命令的格式符语法要求+后面紧跟格式字符串(不能有空格),否则date会把%y%m%d当成额外的操作数,从而报错。

1
2
3
if [ -f /etc/apt/sources.list.d/mysql.list ]; then
sudo CP /etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql.list.bak-$(date +%y%m%d)
fi

配置 MySQL APT 仓库(若文件不存在)

  1. 创建并写入 MySQL 源配置文件(适配 Ubuntu 24.04/noble,若兼容问题则改用 22.04/jammy):
1
echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu/ noble mysql-8.0" | sudo tee /etc/apt/sources.list.d/mysql.list

更新 APT 缓存完成密钥导入后,执行 APT 更新命令,验证是否解决问题:

1
sudo apt update

可选)若仍有问题,检查 MySQL 仓库版本兼容性Ubuntu 24.04(Noble Numbat)是较新的版本,MySQL 的 APT 仓库可能对其支持存在延迟。如果上述步骤后仍有问题,可以考虑:

  • 暂时改用 Ubuntu 官方仓库中的 MySQL 包(Ubuntu 官方仓库提供mysql-server包,版本可能略低但兼容性更好),需要注释掉/etc/apt/sources.list.d/mysql.list中的 MySQL 官方仓库条目,然后执行sudo apt update
  • 等待 MySQL 官方更新对 Ubuntu 24.04 的仓库支持,或改用 MySQL 的通用二进制包安装。
  • Ubuntu 22.04 及以上版本推荐使用signed-by参数指定密钥文件,而非apt-keyapt-key已被标记为弃用),这样更安全且符合新的 APT 规范。

执行完上述步骤后,再次运行sudo apt update,应该可以正常验证 MySQL 仓库的签名,消除该错误提示。

检查 MySQL 仓库的兼容性

Ubuntu 24.04(noble)是较新的版本,MySQL 官方的 APT 仓库可能尚未完全适配该版本。可尝试将仓库的版本代号改为 Ubuntu 22.04(jammy,MySQL 对其支持更成熟),修改mysql.list

1
sudo sed -i 's/noble/jammy/' /etc/apt/sources.list.d/mysql.list

修改后执行sudo apt update,验证是否仍有密钥错误(注:此方法为临时兼容方案,若 MySQL 后续发布 noble 版本,需改回)。

1
2
3
4
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*repo.mysql.com*
sudo apt update
sudo apt install mysql-server 已经安装,就不需要安装了

增强密钥信任级别(复制到 APT 信任目录):

1
sudo cp /usr/share/keyrings/mysql.gpg /etc/apt/trusted.gpg.d/mysql.gpg

卸载MySQL

如果你使用的是Ubuntu的默认MySQL版本(如MySQL 5.7或更高版本),可以通过apt包管理器来卸载,别的版本请使用搜索工具。

停止MySQL服务:

1
sudo systemctl stop mysql

卸载MySQL

1
sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

清理残留配置文件:

1
2
sudo apt-get autoremove	\
sudo apt-get autoclean

Ubuntu卸载mysql-apt-config_0.8.32-1_all.deb

在Ubuntu系统中,如果你想要卸载mysql-apt-config包,可以使用以下步骤。mysql-apt-config是一个工具,用于帮助配置MySQL的APT仓库,以便安装和更新MySQL服务器和客户端软件包。

更新包列表

在卸载任何包之前,建议先更新你的包列表,以确保你正在操作的软件包是最新的。使用以下命令:

1
sudo apt update

卸载mysql-apt-config

接下来,使用apt-get命令来卸载mysql-apt-config。执行以下命令:

1
sudo apt-get remove mysql-apt-config

这条命令会卸载mysql-apt-config及其依赖,但不删除配置文件。

Ubuntu导入数据到mysql

登录MySQL

使用以下命令登录MySQL:

1
mysql -u root -p

输入你之前设置的root用户密码。

创建数据库和用户(如果需要)

在导入数据之前,你可能需要创建一个数据库和用户:因为数据库不包含之前的用户信息,所以数据中如果没有用户,需要创建一个用户才能导入,如果有用户直接导入到指定用户信息中

1
2
3
4
5
CREATE DATABASE mydatabase;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT

mydatabase:数据库名字

myuser:你要创建的用户名称

localhost:你的主机名称,可以是IP也可以是别的,也可以不填写,直接修改成如下格式:

1
CREATE USER 'myuser' IDENTIFIED BY 'password';

password:这个数据库的密码

导入数据

使用命令行导入数据:

假设你的数据文件是.sql格式,你可以使用以下命令导入数据:

1
mysql -u myuser -p mydatabase < /path/to/your/datafile.sql

输入用户的密码。确保将mydatabase、myuser、/path/to/your/datafile.sql替换为实际的数据库名、用户名和文件路径。

myuser:用户名

mydatabase:待导入的数据

Ubuntumysql导出指定的数据库

Ubuntumysql自动备份数据库

在Ubuntu上定时备份MySQL数据库并自动删除旧的备份文件,你可以使用cron定时任务结合mysqldump命令来完成。下面我将详细介绍如何设置这个过程。

创建备份目录

创建一个目录用于存放备份文件,例如/backup/mysql

1
sudo mkdir -p /backup/mysql

创建备份脚本

创建一个脚本文件,例如backup.sh,用于执行数据库备份。

1
sudo nano /usr/local/bin/backup.sh

在打开的编辑器中,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# MySQL数据库信息
DB_NAME="your_database_name"
DB_USER="your_username"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M)
BACKUP_FILE="$DB_NAME-$DATE.sql"

# 创建备份文件
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$BACKUP_FILE

# 删除7天前的备份文件(可根据需要调整天数)
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \;

根据你的需求调整find命令中的-mtime +7部分,以控制保留备份的天数。例如,如果你希望保留30天的备份,则使用-mtime +30。

your_database_name: 数据库名称

your_username:数据库的用户名称

your_password:数据库密码

保存并关闭文件,然后使其可执行:

1
sudo chmod +x /usr/local/bin/backup.sh

设置Cron定时任务

编辑crontab文件来设置定时任务:

1
crontab -e

在打开的编辑器中,添加以下行来每天凌晨1点执行备份脚本:

1
0 1 * * * /usr/local/bin/backup.sh

检查/backup/mysql目录,确认备份文件是否正确生成并被正确删除。

注意:
确保将your_database_name, your_username, 和 your_password替换为实际的数据库名、用户名和密码。出于安全考虑,避免在脚本中直接使用密码,可以考虑使用.my.cnf文件或其他安全措施来管理MySQL凭证。例如,你可以在用户的家目录下创建.my.cnf文件,并在其中存储登录凭证。然后在脚本中使用–defaults-file=/path/to/.my.cnf选项来引用它。配置如下,只需要修改/usr/local/bin/backup.sh改文件

脚本用户名和密码使用–defaults-file=/path/to/.my.cnf,如何配置

创建.my.cnf文件

1
sudo nano /etc/mysql/backup.cnf

配置文件内容

1
2
3
4
[client]
user = your_username
password = your_password
host = localhost #如果在创建用户时候,没有创建主机名,这一行可以不填写,

替换your_username为实际用户名、your_password为实际密码,文件权限需设置为600‌

修改备份脚本

‌调整backup.sh脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# MySQL数据库信息
DB_NAME="your_database_name"
DEFAULTS_FILE="/etc/mysql/backup.cnf"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M)
BACKUP_FILE="$DB_NAME-$DATE.sql"

# 创建备份文件,如果没有配置主机名,还需要添加这个参数 --no-tablespaces
mysqldump --defaults-file=$DEFAULTS_FILE --no-tablespaces $DB_NAME > $BACKUP_DIR/$BACKUP_FILE

# 删除7天前的备份文件(可根据需要调整天数)
find $BACKUP_DIR -type f -name "${DB_NAME}-*.sql" -mtime +7 -exec rm {} \;

错误问题

文件格式或解释器路径错误

修复行尾符问题‌
**若脚本在 Windows 中编辑后上传至 Linux,需转换 CRLF 为 LF 格式:

1
sed -i 's/\r$//' /etc/mysql/backup.cnf