MySQL的运维学习
1、Mysql 5.7的安装
5.7这里使用tar包的方式 https://www.cnblogs.com/hanshuixin/articles/16887899.html 5.7初始的默认密码: tail -200f alert.log localhost@root: 后面的内容,就是本机root用户的初始密码,需要记录下来 *<!ckp29Ne=&
8.0这里使用tar包的方式
https://www.cnblogs.com/telwanggs/p/18369937
2、MySQL的日志
2.1、错误日志
错误日志是MySQL 中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志 该日志时默认开启的,默认存放目录 /var/log,默认的日志文件名是 mysqld.log。可以通过以下的命令来看日志位置 show variables like "%log_error%"
2.2、二进制日志
定义 二进制日志binlog 记录了所有DDL语句和DML语句,但不包括数据查询(select show)语句 作用 1、灾难时的数据恢复 2、MySQL的主从复制时用到 查看是否开启二进制日志 show variables like "%log_bin%"; 看到是否开启binlog 日志 #my.cnf中 加如下的内容 log-bin=mysql-bin server_id=1 binlog_format=ROW docker 安装mysql 5.7 开启binlog docker run --name mysql -p 3306:3306 -v /Users/gaoheqiang/mysqlconf/mysqlconf/my.cnf:/etc/mysql/my.cnf -v /Users/gaoheqiang/mysqlconf/data:/var/lib/mysql -v /Users/gaoheqiang/mysqlconf/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root --restart=always -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 日志格式 STATEMENT 基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中 ROW 基于行的日志记录,记录的是每一行的数据变更(执行了一个update 语句,update 语句影响了 5行,binlog 日志记录的是每一行数据变更前的数据,变更后的数据信息) MIXED 没啥用 查看日志格式 show variables like "%binlog_format%"; 日志内容查看 msyqlbinlog 配置环境变量 vi ~/.bash_profile export PATH=$PATH:/usr/local/mysql/bin source ~/.bash_profile 产看日志内容 mysqlbinlog -d mybatis -v mysql-bin.000001 -v 把行事件 重构为SQL语句 -d 指定数据库名称,只列出指定的数据库相关操作 二进制日志删除 对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量的磁盘空间。 reset master 删除全部 binlog日志。删除之后日志编号将从 000001开始 purge master logs to binlog .***** 删除*****编号之前的所有日志 purge master logs before 'yyyy-mm-dd hh mm ss' 删除日志为 某个日期之前 的 binlog日志 这个命令需要在mysql客户端执行。 MySQL 5.7 配置二进制日志的过期时间 重启生效 expire_logs_days=30
2.3、查询日志
查询日志中记录了客户端的所有操作语句,默认情况下查询日志时未开启的。 show variables like '%general%' 开启查询日志 /etc/my.cnf 添加如下的内容 general_log_file=/usr/local/mysql/log/general.log general_log=1 重启mysql service mysqld restart
2.4、慢查询日志
慢查询日志 慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于min_examined_row_limit 的所有的SQL语句的日志,默认为开启。long_query_time 默认为10秒,最小为0 ,精度可以到微秒 开启慢查询日志并设置慢查询的时间指标 /etc/my.cnf 添加如下的内容 [mysqld] slow_query_log=1 # 慢查询日志文件名。默认值是host_name-slow.log,但可以通过slow_query_log_file选项更改初始值。 slow_query_log_file=/usr/local/mysql/log/slow.log long_query_time=2 记录执行较慢的未使用索引的查询日志 log_queries_not_using_indexes=1
3、主从复制
3.1 什么是主从复制
主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,
然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
主库一般叫master 从库一般叫slave
3.2 主从复制的好处
1、如果主库宕机,数据库的连接可以切换到从库,降低对系统的影响 2、是开启读写分离的基础,有了从库后可以降低主库的压力 3、可以在从库中执行备份,以避免备份期间影响主库。备份时可能存在数据同步存在一定的延迟。
3. 3 主从复制的原理
1、Master 主库在事物提交时,会把数据变更记录在二进制的Binlog 中。 2、从库有两组线程一主叫IOThread 来和主库建立连接读取主库的binlog日志,读取后从到从库的中继日志叫Relay.log 3、从库中另一组线程叫SQLThread 来读取中继日志的变化然后插入到从库的表中 这就是主从复制的原理
3.4 主库和备库的搭建
准备两个服务器 192.168.1.8(主) 192.168.1.130(备) 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 两台服务器分别安装好mysql https://www.cnblogs.com/gaohq/p/17323781.html 主库配置 修改配置文件 /etc/my.cnf #设置Mysql 服务id,保证整个集群环境中唯一, server-id=1 #是否只读 1 代表只读,0代表读写 read-only=0 #忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql #指定同步的数据库,我们创建的数据库都需要同步 #binlog-db=db01 重启mysql 服务器 service mysqld restart 登陆mysql,创建远程连接的账号,并授予主从复制的权限 #创建itcast 用户,并设置密码,该用户可在任意主机连接该MySQL服务,该账号就是从库来连接mysql的用户名和密码 #用户itcast 可以在任意主机上访问当前的主机。 create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456'; #为'itcast'@'%'用户分配主从复制权限 grant replication slave on *.* to 'itcast'@'%'; 通过指令查看二进制日志坐标 show master status; file: 从哪个日志文件开始推送日志文件给从库 position: 从哪个位置开始推送日志 从库配置 修改配置文件 /etc/my.cnf #设置Mysql 服务id,保证整个集群环境中唯一,和主库不一样就行 server-id=2 #是否只读 1 代表只读,0代表读写,该设置只对普通管理员有效。超级管理员依然可以读写。 read-only=1 重启mysql service mysqld restart 登陆从库的mysql,设置主库配置把从库和主库建立关联关系 8.0.23中使用如下的语法 change replication source to source_host='',source_user='',source_password='',source_log_file='',source_log_pos=''; 8.0.23以前的mysql版本使用如下的语法 change master to master_host='192.168.1.8',master_user='itcast',master_password='Root@123456',master_log_file='mysql-bin.000032',master_log_pos=591; 登陆从库的mysql,启动同步操作 start replica; 8.0.23 之后 start slave; 8.0.23 之前 登陆从库的mysql,查看主从同步状态 show replica status\G; 8.0.23 之后 show slave status\G; 8.0.23 之前 Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个正常就就行
以上配置亲测没有问题
4、MySQL事务日志之redo log
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)