使用root用户或具有sudo权限的用户登录MariaDB,命令如下:
sudo mysql -u root -p
输入密码后进入MariaDB命令行界面。
通过CREATE USER语句创建用户,指定用户名、主机(localhost表示本地连接,%表示允许远程连接)和密码:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword123';
示例:创建本地用户db_user,密码为SecurePass@2025:
CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'SecurePass@2025';
遵循最小权限原则,仅授予用户完成任务所需的权限,避免使用GRANT ALL PRIVILEGES(除非必要)。常见权限类型:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost';GRANT SELECT ON database_name.* TO 'username'@'localhost';GRANT SELECT, UPDATE ON database_name.table_name TO 'username'@'localhost';db_user对mydb数据库的读写权限:GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'db_user'@'localhost';执行FLUSH PRIVILEGES;命令,使权限修改立即生效(MariaDB 10.4+版本会自动刷新,但显式执行更安全)。
SELECT User, Host FROM mysql.user;SHOW GRANTS FOR 'username'@'localhost';REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';DROP USER 'username'@'localhost';若需允许远程连接,需修改MariaDB配置文件并调整权限:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf,找到bind-address并将其修改为服务器IP地址或0.0.0.0(允许所有IP连接);sudo systemctl restart mariadb;GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'remote_ip' IDENTIFIED BY 'StrongPassword123';(remote_ip为远程客户端IP)。定期审计用户权限,删除不必要的权限或用户。例如,若用户仅需读取数据,应将权限从ALL PRIVILEGES调整为SELECT;禁止为开发人员分配生产数据库的DROP或ALTER权限。
使用SELECT User, Host, Select_priv, Insert_priv, Update_priv FROM mysql.db;命令查看用户权限详情,识别并移除未使用的权限或用户。建议每月执行一次权限审计。
GRANT语句指定username@specific_ip;bind-address限制监听地址(如bind-address = 192.168.1.100);ufw)允许仅必要的端口(默认3306):sudo ufw allow from trusted_ip to any port 3306。ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE INTERVAL 90 DAY;设置)。运行mysql_secure_installation脚本,自动移除匿名用户、禁止root远程登录、删除测试数据库(test),提升数据库安全性。
编辑/etc/mysql/mariadb.conf.d/50-server.cnf文件,调整关键参数:
innodb_buffer_pool_size:设置为总内存的70%左右(如16GB内存设置为11GB),用于缓存InnoDB表数据和索引;innodb_log_file_size:增大日志文件大小(如256MB-1GB),减少日志刷盘频率,提升写入性能;innodb_flush_log_at_trx_commit:设置为2(平衡性能与安全性,牺牲部分数据安全性换取更高性能,适用于非金融场景);max_connections:根据应用需求设置(如100-500),避免过多连接导致资源耗尽;query_cache_size:启用查询缓存(如64MB),缓存重复查询结果(注意:MariaDB 10.4+版本已移除查询缓存,需使用其他缓存机制)。WHERE、JOIN、ORDER BY子句中频繁使用的列创建索引(如CREATE INDEX idx_column ON table_name(column_name););CREATE INDEX idx_name_age ON users(last_name, first_name););OPTIMIZE TABLE命令整理表碎片,保持索引效率(如OPTIMIZE TABLE large_table;)。EXPLAIN分析查询:通过EXPLAIN SELECT * FROM table_name WHERE condition;查看查询计划,识别全表扫描、索引未使用等问题;SELECT *:仅选择需要的列(如SELECT id, name FROM users;),减少数据传输量和内存占用;JOIN替代子查询(如SELECT a.name FROM table_a a JOIN table_b b ON a.id = b.a_id WHERE b.status = 1;);LIMIT限制结果集:对于大数据量分页查询,使用LIMIT 10 OFFSET 20(获取第3页,每页10条)。OPTIMIZE TABLE命令,整理表碎片(适用于频繁更新的表);mysqlbinlog)和慢查询日志(slow_query_log),释放磁盘空间;mysqldump或mariabackup工具定期备份数据(如每日增量备份、每周全量备份)。