阿里云服务器上使用docker容器部署了mysql,但是现在想直接在服务器上部署mysql怎么操作?
首先,确认 Docker 容器中的 MySQL 是否在运行。:直接部署 MySQL 通常比 Docker 容器性能更高,但需手动管理依赖和更新(参考引用[3] 的资源隔离对比):如果需要将 Docker 容器中的 MySQL 数据迁移到宿主机,先备份容器数据(:避免同时运行 Docker MySQL 和宿主机 MySQL,防止资源竞争。:如果 Docker 容器未完全停止,或残留进程占用 3306
在阿里云服务器上使用docker容器部署了mysql,但是在操作时发现明明数据库中有表但是使用select查询时却显示表不存在,应该是Linux环境中大小写敏感的原因,在MySQL中,控制大小写敏感的参数是lower_case_table_names。在Linux系统上,MySQL默认是大小写敏感的(即lower_case_table_names=0)。我们可以将其设置为1(表示不区分大小写)或2(表示存储为指定的大小写,但在比较时转换为小写)。但是想要在MySQL 8.0中,lower_case_table_names的修改限制,貌似只能在初始化之前设置。服务器之前已经使用Docker容器部署了MySQL数据,Docker的存储和网络性能可能影响数据库稳定性,所以想着干脆干掉Docker容器直接在服务器上部署。
步骤 1: 检查并停止 Docker MySQL 容器
首先,确认 Docker 容器中的 MySQL 是否在运行。如果容器占用 3306 端口,直接安装 MySQL 会失败。
-
查看运行中的 Docker 容器(在服务器上输入以下命令):
docker ps # 检查是否有名为 "mysql" 或其他 MySQL 容器在运行 -
如果容器在运行,停止并移除它(可选,避免冲突):
docker stop mysql # 停止容器 docker rm mysql # 移除容器(如果不再需要)这里最后参数mysql是你的mysql容器名称 -
注意:如果需保留容器数据,仅停止容器即可(不运行
docker rm)。Docker 容器停止后,3306 端口会释放 。
步骤2: 更新系统并安装MySQL
使用 Linux 包管理器在宿主机上安装 MySQL。
-
更新软件包列表:
sudo apt update # Ubuntu/Debian
或
sudo yum update # CentOS(根据系统执行,我用的阿里云执行的这个)
-
安装MySQL服务器:
-
Ubuntu/Debian:
sudo apt install mysql-server -y -
CentOS:
sudo yum install mysql-server -y -
安装后自动启动服务。验证状态:
sudo systemctl status mysql # Ubuntu/Debian 或 mysqld #(CentOS) -
如果没有启动,则先执行启动命令
sudo systemctl start mysql # Ubuntu/Debian 或 sudo systemctl start mysqld # CentOS
-
步骤3: 配置MySQL安全设置
-
运行安全脚本以设置root密码、移除匿名用户等:
sudo mysql_secure_installation -
根据提示操作:
-
设置 root 密码(建议强密码)。
-
移除匿名用户(选择
Y)。 -
禁止 root 远程登录(根据需求选择,如果需远程访问选
N)。 -
删除测试数据库(选择
Y)。 -
重新加载权限表(选择
Y)。
-
步骤 4: 配置防火墙和阿里云安全组
确保本地防火墙和阿里云安全组允许 MySQL 端口(3306)。
-
开放本地防火墙(如果使用 UFW):
sudo ufw allow 3306/tcp # 允许 MySQL 端口 sudo ufw reload # 重新加载规则 或者 sudo firewall-cmd --list-all #查看防火墙列表 sudo firewall-cmd --permanent --add-port=3306/tcp #添加3306端口 sudo firewall-cmd --reload #重新加载规则 -
阿里云控制台配置:
-
登录阿里云控制台,进入 ECS 实例 > 安全组。
-
添加入站规则:协议类型
TCP,端口范围3306,源 IP0.0.0.0/0(或你的 IP 段,建议尽量不要开放所有的ip)。 -
保存规则。
-
步骤 5: 验证 MySQL 连接
测试宿主机上的 MySQL 是否可访问:
mysql -u root -p # 输入步骤 3 设置的密码
-
成功登录后,执行简单 SQL 命令:
SHOW DATABASES; -- 查看数据库列表 -
如果连接失败,检查端口冲突:
sudo netstat -tunlp | grep 3306 # 查看 3306 端口占用
关键注意事项
-
端口冲突处理:如果 Docker 容器未完全停止,或残留进程占用 3306 端口,使用
sudo kill <进程ID>结束进程。 -
数据迁移:如果需要将 Docker 容器中的 MySQL 数据迁移到宿主机,先备份容器数据(
docker exec -it mysql mysqldump -u root -p dbname > backup.sql),然后导入宿主机 MySQL。 -
性能影响:直接部署 MySQL 通常比 Docker 容器性能更高,但需手动管理依赖和更新。
-
安全性:避免同时运行 Docker MySQL 和宿主机 MySQL,防止资源竞争。
配完了发现忘记了最关键的一步,设置MySQL的大小写敏感权限。。
步骤 1: 停止 MySQL 服务
-
(在服务器上输入以下命令):
sudo systemctl stop mysqld
步骤 2: 备份所有数据
-
(当然我是新建的不需要,有需要的可以在服务器上输入以下命令):
sudo mysqldump -u root -p --all-databases --routines --events > /root/mysql_full_backup_$(date +%F).sql #或者更简单的写法 mysqldump -u root -p 要备份的数据库名称 > /生成的sql文件路径/生成的sql文件名.sql
步骤 3. 删除原有数据目录
sudo rm -rf /var/lib/mysql/*
步骤4. 修改配置文件
sudo vi /etc/my.cnf
在 [mysqld] 区块添加配置:
[mysqld]
lower_case_table_names=1 # 1不区分大小写,0区分大小写
步骤5. 重新初始化数据库
sudo mysqld --initialize --user=mysql --lower-case-table-names=1
步骤6. 获取临时root密码
sudo grep 'temporary password' /var/log/mysqld.log
步骤7. 启动服务并修改密码
sudo systemctl start mysqld mysql -u root -p # 使用临时密码登录
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
步骤8. 恢复备份数据
mysql -u root -p < /root/mysql_full_backup_*.sql
#或者
mysql -u root -p 备份的数据库名称 <备份的数据sql文件.sql
步骤9. 重启Mysql
systemctl restart mysqld
其他小技巧:
如果只是想单独的删除数据库数据并重新导入备份数据:
删旧库:
执行
DROP DATABASE IF EXISTS 你的库名;。
建新库:
执行建库语句,并确保字符集与原库一致(如 utf8mb4),防止乱码。
CREATE DATABASE 你的库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
导数据:
执行导入命令
mysql -u root -p 你的库名 < 备份文件.sql。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)