MySql学习笔记
MySQL学习笔记(8.0)
一切只因花几十块买了一年的云服务器。刚好目前需要用 用 JDBC ,于是就把数据库部署到了服务器上面。然而这其中却遇到了难以想象的困难(后来才发现没有必要这么弄,且一般也不这么弄,安全性大打折扣)。
1.部署环境以及初始化配置
- Ubuntu
1.下载安装,配置密码
以root用户登录之后:
1 | apt update |
此时你可以直接进入mysql
1 | mysql |
- 开启远程链接功能
1 | mysql |
- 修改MySQL配置文件
1 | vim /etc/mysql/mysql.conf.d/mysqld.cnf |
2. 开始正式学习mysql
1. 修改数据库root密码
通过各类手段确定数据库信息:
1 mysql --version如果没直接显示则可能docker容器中运行的。
- 停止数据库服务
1 | sudo systemctl stop mysql |
- “跳过授权表”方式启动(安全模式
1 | mysqld_safe --skip-grant-tables & |
- root 用户无密码登录
1 | mysql -u root |
- 修改 root 密码
- MySQL 5.7+ / 8.0 / MariaDB 新版本
1 | FLUSH PRIVILEGES; |
- 旧版本
1 | FLUSH PRIVILEGES; |
- 退出并重启数据库
1 | exit |
- 用新密码验证
1 | mysql -u root -p |
2. 数据迁移
数据的导入导出:
1 | mysqldump -uroot -p --all-databases > /tmp/all_databases_backup.sql |
4. 配置文件分析
有时候会遇到一些奇怪的需求例如修改大小写敏感等。这类参数是初始化级别的,只能通过重新起容器或者重装实现。
除了 lower_case_table_names
,常见的系统级参数有:
1. 字符集和排序规则(部分情况)
character_set_server
collation_server
如果是 MySQL 初始化数据目录时设置的,之后只能通过重新初始化才能完全替换已有数据的默认字符集。
(已存在的数据库、表、列不会自动改变字符集。)
2. 数据目录位置
datadir
数据目录路径是初始化时就绑定的,如果换路径,需要复制数据并修改权限,或者重新mysqld --initialize
初始化。
3. 事务日志大小
innodb_log_file_size
更改这个值需要先关闭 MySQL,删除旧的 InnoDB 日志文件(ib_logfile0
、ib_logfile1
),再重启让 MySQL 重新生成。
4. 系统表空间大小
innodb_system_tablespace
(旧版用ibdata1
)
这个大小一旦初始化生成就不能缩小,只能重建实例或导出导入数据。
5. GTID 模式
gtid_mode
(从关闭到开启)
在部分情况下从 OFF → ON 需要清理或重建数据才能确保 GTID 一致性。
6. binlog 格式启用状态
log_bin
(是否启用二进制日志)
关闭 → 开启需要 MySQL 重启;某些场景下修改会影响数据同步,需要新建数据目录才能确保一致。
3. 日志分析
MySQL 自带的日志类型主要是这些
1. MySQL 日志分类
日志类型 | 作用 | 默认状态 | 典型文件位置 |
---|---|---|---|
错误日志 (log_error ) |
记录 MySQL 启动、关闭、运行错误等 | 开启 | /var/lib/mysql/hostname.err |
通用查询日志 (general_log ) |
记录所有客户端的连接和执行的 SQL 语句(类似“访问日志”) | 关闭 | /var/log/mysql/general.log |
慢查询日志 (slow_query_log ) |
记录执行时间超过阈值的 SQL | 关闭 | /var/log/mysql/slow.log |
二进制日志 (log_bin ) |
记录所有数据变更(用于主从同步和恢复) | 关闭 | /var/lib/mysql/mysql-bin.000001 等 |
中继日志 (relay_log ) |
用于从库复制 | 关闭 | /var/lib/mysql/relay-log.000001 等 |
审计日志(需插件) | 记录详细的安全访问情况 | 关闭 | 自定义 |
2. 你说的“访问日志”
在 MySQL 里,一般用 通用查询日志 (general_log) 来当“访问日志”,它会记录:
- 连接/断开时间
- 用户名
- 客户端 IP
- 每条执行的 SQL
但是性能开销很大,不建议长期开启。
3. 如何开启“访问日志”
在你挂载的配置目录 /data/soft/mysql8-20280812/mysql-conf
里新建:
1 | [mysqld] |
重启 MySQL:
1 | docker restart mysql8-2 |
然后挂载的 /data/soft/mysql8-20280812/log/mysql-logs/general.log
就能看到访问记录了,例如:
1 | 2025-08-12T06:45:01.234567Z 10 Connect root@192.168.1.5 on test |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment