在 Debian 上使用 MariaDB 进行开发
一 安装与初始化
- 更新索引并安装服务端与客户端的常用包:sudo apt update && sudo apt install mariadb-server mariadb-client-core。安装完成后启动并设置开机自启:sudo systemctl start mariadb && sudo systemctl enable mariadb。可用 mysql -V 或 sudo systemctl status mariadb 验证安装状态。首次安装强烈建议运行安全初始化:sudo mysql_secure_installation,按提示设置 root 强密码、删除匿名用户、禁止 root 远程登录、移除测试库等。完成后本地连接测试:mysql -u root -p。
二 配置开发环境
- 字符集与排序规则:统一使用 utf8mb4 以避免表情符号乱码。服务端在 /etc/mysql/mariadb.conf.d/50-server.cnf 的 [mysqld] 段添加或修改:character-set-server=utf8mb4、collation-server=utf8mb4_general_ci;客户端在 [mysql] 段添加:default-character-set=utf8mb4。修改后重启:sudo systemctl restart mariadb,登录后可用 SHOW VARIABLES LIKE ‘character_set_server’; 与 SHOW VARIABLES LIKE ‘collation_server’; 验证。
- 网络与端口:默认端口 3306。仅本地开发可保持默认绑定;如需远程开发,编辑 50-server.cnf 将 bind-address 改为 0.0.0.0,并在防火墙放行 3306(如 sudo ufw allow 3306/tcp),同时仅对可信网段开放。远程连接测试:mysql -u -h -P 3306 -p。
三 数据库与用户管理
- 登录数据库:mysql -u root -p。常用 SQL:查看版本 SELECT VERSION(); 创建开发库 CREATE DATABASE IF NOT EXISTS devdb DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 创建应用账号 CREATE USER ‘dev’@‘%’ IDENTIFIED BY ‘StrongPass!’; 授权 GRANT ALL PRIVILEGES ON devdb.* TO ‘dev’@‘%’; 刷新权限 FLUSH PRIVILEGES; 修改密码 ALTER USER ‘dev’@‘%’ IDENTIFIED BY ‘NewPass!’; 撤销权限与删除用户 REVOKE ALL PRIVILEGES ON devdb.* FROM ‘dev’@‘%’; DROP USER ‘dev’@‘%’; 建议遵循最小权限原则,应用连接使用仅对目标库具备 SELECT/INSERT/UPDATE/DELETE 权限的专用账号,避免使用 root。
四 备份恢复与日常维护
- 逻辑备份与恢复:备份 mysqldump -u root -p --single-transaction --routines --triggers --default-character-set=utf8mb4 devdb > devdb.sql;恢复 mysql -u root -p devdb < devdb.sql。定时备份示例:创建脚本 backup.sh 写入 mysqldump -u root -p devdb > /backups/devdb_$(date +%F).sql,赋权 chmod +x backup.sh,加入定时任务 0 2 * * * /backups/backup.sh。性能与诊断:SHOW PROCESSLIST; 查看连接,EXPLAIN SELECT …; 分析慢查询,建议开启慢查询日志(slow_query_log、slow_query_log_file、long_query_time)定位全表扫描与索引缺失。
五 应用连接与开发实践
- 连接示例:JDBC jdbc:mariadb://localhost:3306/devdb?useSSL=false&characterEncoding=utf8mb4;Python(PyMySQL)pymysql.connect(host=‘127.0.0.1’, port=3306, user=‘dev’, password=‘devpass’, database=‘devdb’, charset=‘utf8mb4’);Node.js(mysql2)mysql.createConnection({ host: ‘127.0.0.1’, user: ‘dev’, password: ‘devpass’, database: ‘devdb’, charset: ‘utf8mb4’ })。开发建议:统一使用 utf8mb4;为高频查询建立合适索引;使用连接池与合理的事务隔离级别;SQL 语句以分号结尾并在版本控制中管理迁移脚本(如 Flyway/Liquibase)。