Mysql基础使用

发布于 2025年11月17日

安装数据库

容器化方式部署

mkdir -p /data/mysql
docker run --name mysql -d \
    --restart always \
    -e MYSQL_ROOT_PASSWORD=Abc123# \
    -p 3316:3306 \
    -v /data/mysql:/var/lib/mysql \
     swr.cn-southwest-2.myhuaweicloud.com/springboot-projiect-ckgl/mysql:8.0.15在MySQL中创建用户、允许远程登录并授权管理数据库:

软件包方式部署

apt update
apt install mariadb-server
systemctl enable mariadb --now
#安全配置
mysql_secure_installation
执行后会引导你完成以下关键配置:

设置root密码(强烈建议设置)
删除匿名用户
禁止root远程登录(安全起见)
删除测试数据库
重新加载权限表
#最后验证连接
mysql -uroot -p

建库建用户

1. 连接MySQL服务器

使用root或具有管理员权限的账户登录MySQL:

mysql -u root -p

2. 创建用户并设置密码

CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
  • %表示允许从任意远程主机登录。若限制特定IP,可替换为 'IP地址'(如 '192.168.1.100')。


3. 授权用户管理指定数据库

授予对数据库(例如 mydb)的所有权限:

GRANT ALL PRIVILEGES ON mydb.* TO '用户名'@'%';
  • mydb.*表示授权操作 mydb数据库的所有表(如需授权全部数据库则用 *.*)。


4. 刷新权限使设置生效

FLUSH PRIVILEGES;

5. 检查用户权限

确认授权是否成功:

SHOW GRANTS FOR '用户名'@'%';

halodb示例

以halodb为例,root用户如果不能远程连接,就创建halo用户,远程连接来管理数据库。

#查看数据库密码
cat /opt/halo/docker-compose.yaml|grep WORD 
#进入容器,连接数据库
docker exec -it halo-halodb-1 /bin/bash
mysql -uroot -p
-- 创建用户 halo并允许从任意IP登录
CREATE USER 'halo'@'%' IDENTIFIED BY 'halo';

-- 授权 halo管理 halo数据库
GRANT ALL PRIVILEGES ON halo.* TO 'halo'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

最后,云服务器安全组放开数据库服务3306/tcp端口,使用数据库连接工具(比如DBeaver)连接数据库,对halo数据库进行管理。使用完毕以后关闭安全组关闭数据库服务3306/tcp端口。

我原本打算,连接halo的数据库。查看用户表,获取用户邮箱,结果连接上数据库后,发现只有一个表。查看官网得知,只能通过API接口进行CURD,官网开发者文档链接:RESTful API | Halo 文档

数据库备份与恢复

因为我的数据库都是我个人在使用(非企业),每个系统基本就一个数据库,这里主要记录单库的备份与恢复方法,方便后续忘记了随时可以来这里查阅。

备份

#基础备份命令
mysqldump -u root -p 数据库名 > 备份文件名.sql
#基础示例
mysqldump -u root -p mydb > /backup/mydb_backup_$(date +%Y%m%d).sql
#压缩备份(节省空间,推荐!)
mysqldump -u root -p mydb | gzip > /backup/mydb_backup_$(date +%Y%m%d).sql.gz

推荐增强版(避免锁表,适合生产环境)

mysqldump -u root -p --single-transaction mydb > /backup/mydb_backup_$(date +%Y%m%d).sql

参数说明

  • --single-transaction:对InnoDB表进行一致性备份,不会锁表,适合在线备份

  • $(date +%Y%m%d):自动添加日期到备份文件名,方便管理

恢复

#确保目标数据库存在(如果不存在,先创建)
CREATE DATABASE IF NOT EXISTS mydb;
#基础恢复命令
mysql -u root -p mydb < /backup/mydb_backup_20231027.sql
#压缩备份恢复命令
gunzip < /backup/mydb_backup_20231027.sql.gz | mysql -u root -p mydb

实用技巧与最佳实践

1. 定期备份自动化

创建一个备份脚本(比如backup_db.sh):

1#!/bin/bash
2mysqldump -u root -pMyPasswd --single-transaction mydb | gzip > /backup/mydb_backup_$(date +%Y%m%d).sql.gz

然后设置cron任务,每天凌晨2点自动备份:

10 2 * * * /path/to/backup_db.sh

2. 备份文件管理

  • 命名规范:数据库名_日期.sql(如mydb_20231027.sql

  • 存储位置:建议放在独立的备份目录,比如/backup/

  • 保留策略:保留最近7天的备份,每周存一份到异地



评论