DBA专题
DBA授课
DBA公开课
DBA训练营三天
01.Mysql基础入门-数据库简介
02.Mysql基础入门-部署与管理体系
03.MySQL主流版本版本特性与部署安装
04.Mysql-基础入门-用户与权限
05 MySQL-SQL基础2
06 SQL高级开发-函数
07 MySQL-SQL高级处理
08 SQL练习 作业
09 数据库高级开发2
10 Mysql基础入门-索引
11 Mysql之InnoDB引擎架构与体系结构
12 Mysql之InnoDB存储引擎
13 Mysql之日志管理
14 Mysql备份,恢复与迁移
15 主从复制的作用及重要性
16 Mysql Binlog Event详解
17 Mysql 主从复制
18 MySQL主从复制延时优化及监控故障处理
19 MySQL主从复制企业级场景解析
20 MySql主从复制搭建
21 MySQL高可用-技术方案选型
22 MySQL高可用-MHA(原理篇)
23 MySQL MHA实验
24 MySQL MGR
25 部署MySQL InnoDB Cluster
26 MySQL Cluster(MGR)
27 MySQL ProxySQL中间件
相信可能就有无限可能
-
+
首页
03.MySQL主流版本版本特性与部署安装
# 1.MySQL5.6,5.7与8.0的进阶之路 > 面试高频 ## 1.1.MySQL5.6新特性 1. **支持GTID复制** 2. **支持延迟复制(备用库)** 3. **支持基于库级别的并行复制(一个实例存在多个schema,对从库复制提升有帮助)** 4. **mysqlbinlog命令支持远程备份binlog**(很关键的一个功能,多集群备份) 5. 对TIME, DATETIME和TIMESTAMP进行了重构,可支持小数秒。DATETIME的空间需求从8byte减少到5byte 6. **支持Online DDL**。ALTER操作不再阻塞DML。(三种方式copy online,inplace online,inplace but offline) **小数据量级可以,大表DDL操作会导致从库严重延时** 7. 支持可传输表空间(transportable tablespaces),`alter table t1 import tablespace` 8. 支持统计信息的持久化。避免主从之间或数据库重启后,同一个SQL的执行计划有差异 1. 统计信息解释:MySQL通过采样,统计出来表和索引相关信息,例如,表的记录数、聚集索引page个数 2. 用处:生成执行计划时,需要根据索引的统计信息进行估算,计算出最低代价(或者说是最小开销)的执行计划 3. 统计信息参数:`show variables like 'innodb_stats%';` 4. 存在哪里?: 1. `持久化数据:mysql.innodb_index_stats和mysql.innodb_table_stats` 2. 非持久化数据(存在内存中):存在内存表MEMORY Table 即`INFORMATION_SCHEMA.TABLES、INFORMATION_SCHEMA.STATISTICS、INNODB_INDEXES` 9. 支持支持全文索引(基本用不到,全文存储es更合适) 10. 支持InnoDB Memcached plugin(内存数据库,用不到 有 redis) 11. EXPLAIN可用来查看DELETE,INSERT,REPLACE,UPDATE等DML操作的执行计划,在此之前,只支持SELECT操作 12. 分区表的增强,包括最大可用分区数增加至8192,支持分区和非分区表之间的数据交换,操作时显式指定分区 13. Redo Log总大小的限制从之前的4G扩展至512G 14. **Undo Log可保存在独立表空间中,因其是随机IO,更适合放到SSD中。但仍然不支持空间的自动回收** 15. **支持在线和关闭MySQL时dump和load Buffer pool的状态,避免数据库重启后需要较长的预热时间** 16. InnoDB内部的性能提升,包括拆分kernel mutex,引入独立的刷新线程,可设置多个purge线程 17. 优化器性能提升,引入了ICP,MRR,BKA等特性,针对子查询进行了优化 ## 1.2.MySQL5.7新特性 1. **支持组复制和InnoDB Cluster(MGR)** 2. 支持多源复制(业务场景较少,传统企业还有) 3. **支持增强半同步(AFTER_SYNC)即无损复制** 4. **支持基于表级别(LOGICAL_CLOCK)的并行复制** 5. **支持在线开启GTID复制** 6. 支持在线设置复制过滤规则 7. **支持在线修改Buffer pool的大小** 8. 支持在同一长度编码字节内,修改VARCHAR的大小只需修改表的元数据,无需创建临时表 9. **支持可设置NUMA架构的内存分配策略(innodb_numa_interleave)** 10. 支持透明页压缩(Transparent Page Compression) 11. **支持UNDO表空间的自动回收** 12. 支持查询优化器的增强和重构 13. 可查看当前session正在执行的SQL的执行计划(EXPLAIN FOR CONNECTION) 14. 引入了查询改写插件(Query Rewrite Plugin),可在服务端对查询进行改写 15. **EXPLAIN FORMAT=JSON会显示成本信息,这样可直观的比较两种执行计划的优劣** 16. 引入了虚拟列,类似于Oracle中的函数索引(定制场景使用) 17. 新实例不再默认创建test数据库及匿名用户 18. **引入ALTER USER命令,可用来修改用户密码,密码的过期策略,及锁定用户等** 19. **mysql.user表中存储密码的字段从password修改为authentication_string** 20. 支持表空间加密 21. 优化了Performance Schema,其内存使用减少 22. Performance Schema引入了众多instrumentation。常用的有Memory usage instrumentation,可用来查看MySQL的内存使用情况,Metadata Locking Instrumentation, 可用来查看MDL的持有情况,Stage Progress instrumentation,可用来查看Online DDL的进度 23. 同一触发事件(INSERT,DELETE,UPDATE),同一触发时间(BEFORE,AFTER),允许创建多个触发器。在此之前,只允许创建一个触发器 24. InnoDB原生支持分区表,在此之前,是通过ha_partition接口来实现的 25. 分区表支持可传输表空间特性。 26. **集成了SYS数据库,简化了MySQL的管理及异常问题的定位** 27. 原生支持JSON类型,并引入了众多JSON函数 28. 引入了新的逻辑备份工具mysqlpump,支持表级别的多线程备份 29. 引入了新的客户端工具mysqlsh,其支持三种语言:JavaScript, Python and SQL。两种API:X DevAPI,AdminAPI,其中,前者可将MySQL作为文档型数据库进行操作,后者用于管理InnoDB Cluster 30. mysql_install_db被mysqld --initialize代替,用来进行实例的初始化 31. 原生支持systemd 32. 引入了super_read_only选项 33. **可设置SELECT操作的超时时长(max_execution_time)** 34. **可通过SHUTDOWN命令关闭MySQL实例** 之前是mysqladmin shutdown(调用mysql_shutdown()API) 35. **引入了innodb_deadlock_detect选项**,在高并发场景下,可使用该选项来关闭死锁检测 36. 引入了Optimizer Hints,可在语句级别控制优化器的行为,如是否开启ICP,MRR等,在此之前,只有Index Hints 37. GIS的增强,包括使用Boost.Geometry替代之前的GIS算法,InnoDB开始支持空间索引 ## 1.3.MySQL8.0新特性 1. **引入了原生的,基于InnoDB的数据字典。**数据字典表位于mysql库中,对用户不可见,同mysql库的其它系统表一样,保存在数据目录下的mysql.ibd文件中。不再置于mysql目录下 2. 重构了INFORMATION_SCHEMA,其中部分表已重构为基于数据字典的视图,在此之前,其为临时表 3. PERFORMANCE_SCHEMA查询性能提升,其已内置多个索引 4. **InnoDB存储引擎支持原子DDL** 5. **支持不可见索引(Invisible index)** 6. **支持降序索引** 7. **优化器加入了直方图功能,对比Oracle** 8. 支持公用表表达式(Common table expressions) 9. **支持窗口函数(Window functions)。** 10. 支持角色(Role)功能,对比Oracle 11. 支持资源组(Resource Groups),可用来控制线程的优先级及其能使用的资源,目前,能被管理的资源只有CPU 12. 引入了innodb_dedicated_server选项,可基于服务器的内存来动态设置innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method 13. **支持秒加字段(Instant add column)功能** 14. JSON字段的部分更新(JSON Partial Updates) 15. 支持自增主键的持久化 16. **支持可持久化全局变量**(SET PERSIST) 17. **默认字符集由latin1修改为utf8mb4** 18. **默认开启UNDO表空间**,且支持在线调整数量(innodb_undo_tablespaces)。在MySQL 5.7中,默认不开启,若要开启,只能初始化时设置 19. 支持备份锁 20. Redo Log的优化,包括允许多个用户线程并发写入log buffer,可动态修改innodb_log_buffer_size的大小 21. **默认的认证插件由mysql_native_password更改为caching_sha2_password** 22. 默认的内存临时表由MEMORY引擎更改为TempTable引擎,相比于前者,后者支持以变长方式存储VARCHAR,VARBINARY等变长字段。从MySQL 8.0.13开始,TempTable引擎支持BLOB字段 23. **Grant不再隐式创建用户** `grant all privileges on test.* to joe@localhost identified by '123456';` 失效 24. SELECT ... FOR SHARE和SELECT ... FOR UPDATE语句中引入NOWAIT和SKIP LOCKED选项,解决电商场景热点行问题 25. 正则表达式的增强,新增了4个相关函数,REGEXP_INSTR(),REGEXP_LIKE(),REGEXP_REPLACE(),REGEXP_SUBSTR() 26. **查询优化器在制定执行计划时,判定数据是否在Buffer Pool中**`。`之前版本,假设数据都在磁盘中 27. ha_partition接口从代码层移除,如果要使用分区表,只能使用InnoDB存储引擎 28. 引入了更多细粒度的权限来替代SUPER权限,现在授予SUPER权限会提示warning 29. **GROUP BY语句不再隐式排序** 30. **information_schema中的innodb_locks和innodb_lock_waits表被移除**,取而代之的是performance_schema中的data_locks和data_lock_waits表 31. **引入performance_schema.variables_info表**,记录了参数的来源及修改情况 32. 增加了对于客户端报错信息的统计(performance_schema.events_errors_summary_xxx) 33. 可统计查询的响应时间分布(call sys.ps_statement_avg_latency_histogram()) 34. **支持直接修改列名**(ALTER TABLE ... RENAME COLUMN old_name TO new_name) 35. 用户密码可设置重试策略(Reuse Policy) 36. **移除PASSWORD()函数**。这就意味着无法通过“SET PASSWORD ... =PASSWORD('auth_string') ”命令修改用户密码 37. **代码层移除Query Cache模块**,故Query Cache相关的变量和操作均不再支持 38. BLOB, TEXT, GEOMETRY和JSON字段允许设置默认值 39. **可通过RESTART命令重启MySQL实例** # 2.MySQL部署安装 ## 2.1.8.0部署默认安装 > 5.7与8.0部署安装类似 仅演示二进制安装(基本通用选择),官网地址 https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html **Table 2.3 MySQL Installation Layout for Generic Unix/Linux Binary Package** ![image-20240318202314266](https://img.sunrisenan.com/img/2024/03/18/202316689.png) **1.安装前准备** ```sql 1.解压 shell> tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 2.安装libaio,MySQL依赖于libaio库,同时卸载掉mariadb的lib库 shell> yum remove -y mariadb-libs shell> yum search libaio 3.添加用户 shell> groupadd mysql shell> useradd -r -g mysql -s /bin/false mysql shell> cd /usr/local shell> cp /dowland/mysql-8.0.24-linux-glibc2.12-x86_64/ ./ -rp shell> ln -s mysql-8.0.24-linux-glibc2.12-x86_64 mysql ``` **2.部署** ```sql #cd到目录 shell> cd mysql #创建目录 shell> mkdir mysql-files #目录归属mysql shell> chown mysql:mysql mysql-files #服务mysql实例目录文件夹权限 shell> chmod 750 mysql-files #初始化安装-默认配置 shell> bin/mysqld --initialize --user=mysql 2021-08-21T02:06:50.455383Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.24-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.24) initializing of server in progress as process 673554 2021-08-21T02:06:50.465754Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2021-08-21T02:06:51.608750Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2021-08-21T02:06:53.421527Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: slip=4/n=l#X #看下目录文件8.0 [root@db-tdptest-3-p4yr-ptest mysql3306]# ll var total 176568 -rw-r----- 1 mysql mysql 56 Aug 21 14:33 auto.cnf -rw------- 1 mysql mysql 1680 Aug 21 14:33 ca-key.pem -rw-r--r-- 1 mysql mysql 1112 Aug 21 14:33 ca.pem -rw-r--r-- 1 mysql mysql 1112 Aug 21 14:33 client-cert.pem -rw------- 1 mysql mysql 1680 Aug 21 14:33 client-key.pem -rw-r----- 1 mysql mysql 196608 Aug 21 14:34 #ib_16384_0.dblwr -rw-r----- 1 mysql mysql 8585216 Aug 21 14:33 #ib_16384_1.dblwr -rw-r----- 1 mysql mysql 5928 Aug 21 14:33 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 Aug 21 14:34 ibdata1 -rw-r----- 1 mysql mysql 50331648 Aug 21 14:34 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 Aug 21 14:33 ib_logfile1 drwxr-x--- 2 mysql mysql 6 Aug 21 14:34 #innodb_temp drwxr-x--- 2 mysql mysql 143 Aug 21 14:33 mysql -rw-r----- 1 mysql mysql 25165824 Aug 21 14:34 mysql.ibd drwxr-x--- 2 mysql mysql 8192 Aug 21 14:33 performance_schema -rw------- 1 mysql mysql 1680 Aug 21 14:33 private_key.pem -rw-r--r-- 1 mysql mysql 452 Aug 21 14:33 public_key.pem -rw-r--r-- 1 mysql mysql 1112 Aug 21 14:33 server-cert.pem -rw------- 1 mysql mysql 1676 Aug 21 14:33 server-key.pem drwxr-x--- 2 mysql mysql 28 Aug 21 14:33 sys -rw-r----- 1 mysql mysql 16777216 Aug 21 14:34 undo_001 -rw-r----- 1 mysql mysql 16777216 Aug 21 14:34 undo_002 #创建RSA文件和SSL文件确保加密功能 shell> bin/mysql_ssl_rsa_setup #启动mysql shell> bin/mysqld_safe --user=mysql & #第一个错误,日志目录问题 shell> mkdir -p /var/log/mariadb/ shell> touch /var/log/mariadb/mariadb.log # 报错,pid目录问题 2021-08-21T02:23:08.690318Z 0 [ERROR] [MY-011811] [Server] Can't start server: can't check PID filepath: No such file or directory shell> mkdir -p /var/run/mariadb shell> chown -R mysql.mysql /var/run/mariadb #默认配置文件目录 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log #日志目录 pid-file=/var/run/mariadb/mariadb.pid #pid目录 #日志目录内容,socket接口位置 端口 2021-08-21T02:28:50.484371Z 0 [System] [MY-010931] [Server] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.24' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL. #命令域加入mysql目录 export PATH=/usr/local/mysql8/bin:$PATH ``` **3.登入** 客户端方式登入 ```sql mysql -uroot -pslip=4/n=l#X -h127.0.0.1 -P3306 ``` 接口方式登入 ```sql mysql -uroot -pslip=4/n=l#X -S /var/lib/mysql/mysql.sock ``` 修改密码 ```sql ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> ALTER USER USER() IDENTIFIED BY '123456'; ``` 创建一个新用户 ```sql mysql> create user qianlong@'localhost' identified by '123456'; mysql> grant all on *.* to qianlong@'localhost' with grant option; mysql -uqianlong -p123456 -S /var/lib/mysql/mysql.sock ``` 关机 ```sql #利用mysqladmin管理命令shutdown mysqladmin -uqianlong -p123456 -S /var/lib/mysql/mysql.sock shutdown #利用mysql客户端shutdown mysql -uqianlong -p123456 -S /var/lib/mysql/mysql.sock -e "shutdown" #暴力关机 kill -9 mysqlpid ``` ### 2.2.8.0部署自定义安装 ```sql #1.定义目录文件 shell > mkdir -p /data #推荐生产环境直接挂在data目录 # 2.自定义配置文件 mkdir -p /chj/class/data/mysql3306/{log,etc,tmp,var} vim /etc/my.cnf [mysql] no_auto_rehash port= 3306 socket= /chj/class/data/mysql3306/tmp/mysql.sock default_character_set= utf8mb4 prompt= "\u:\p:\d>" [mysqld] user= mysql port= 3306 default_storage_engine= InnoDB character_set_server= utf8mb4 init_connect= 'SET NAMES utf8mb4' transaction_isolation= REPEATABLE-READ basedir= /chj/app/mysql-5.7.30-linux-glibc2.12-x86_64/ datadir=/chj/class/data/mysql3306/var/ socket= /chj/class/data/mysql3306/tmp/mysql.sock pid_file= /chj/class/data/mysql3306/var/mysql.pid tmpdir= /chj/class/data/mysql3306/tmp/ slave_load_tmpdir= /chj/class/data/mysql3306/tmp/ log_error= /chj/class/data/mysql3306/log/mysql.err general_log= 0 general_log_file= /chj/class/data/mysql3306/log/mysql.log #3.初始化数据 shell> mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3307/data/ #4.启动数据库 mysqld --defaults-file=/data/mysql3307/etc/my.cnf --user=mysql & #5.连接数据库 创建用户 mysql> mysql> create user qianlong@'localhost' identified by '123456'; mysql> grant all on *.* to qianlong@'localhost' with grant option; #6.创建数据库 mysql> create database test #7.打包数据库 tar zcvf mysql_init.tar.gz /chj/class/data/mysql3306/ ``` **知识点:mysqld_safe和mysqld区别** - mysqld:是mysql的核心程序,用于管理mysql的数据库文件以及用户的请求操作。mysqld可以读取配置文件,启动Mysql实例 - mysqld_safe:mysqld的守护进程(守护进程(Daemon)一般是为了保护我们的程序/服务的正常运行,当程序被关闭、异常退出等时再次启动程序/恢复服务),mysqld挂了会自动把mysqld进程拉起来,相当于见识mysqld进程。 - 生产环境中使用mysqld_safe居多 - 启动顺序 mysql.server—>mysqld_safe—>mysqld ## 2.3.企业级部署打包安装(附实际生产参数) 作业 - 整体流程 - 标准化安装目录(同上) - 标准化安装部署(同上) - 标准化账户与自定义库创建 - 关机 - 打包mysql - 脚本一键部署 - 启动和停止(shell 脚本编写) - 解压缩mysql实例包(作业,实现多实例部署) - 思路讲解-脚本课中放出 - 企业级实参参数配置(多实例部署需要需改的参数) ```sql ## MySQL V5.7 Config [mysql] # CLIENT # no_auto_rehash port = 3306 #多实例 socket = /xxx/mysql3306/tmp/mysql.sock #多实例 default_character_set = utf8mb4 prompt = "\\u:\\p:\\d>" [mysqld] ### GENERAL ### secure_file_priv = '' sql_mode = '' #兼容业务 #super_read_only = ON #从库开启 local_infile = OFF server_id = 1234563306 user = mysql port = 3306 default_storage_engine = InnoDB character_set_server = utf8mb4 init_connect = 'SET NAMES utf8mb4' transaction_isolation = REPEATABLE-READ basedir = /opt/soft/mysql5722 #多实例 datadir = /xxx/mysql3306/var/ #多实例 socket = /xxx/mysql3306/tmp/mysql.sock #多实例 pid_file = /xxx/mysql3306/var/mysql.pid #多实例 tmpdir = /xxx/mysql3306/tmp/ #多实例 slave_load_tmpdir = /xxx/mysql3306/tmp/ #多实例 lower_case_table_names = 1 wait_timeout = 3600 interactive_timeout = 3600 explicit_defaults_for_timestamp = 0 ### performance schema ### performance_schema = ON performance_schema_digests_size = 30000 max_digest_length = 4096 performance_schema_max_digest_length = 4096 performance_schema_max_table_instances = 30000 ### MyISAM ### key_buffer_size = 32M read_buffer_size = 2M read_rnd_buffer_size = 8M ### BINARY LOG ### log_bin = /xxx/mysql3306/var/mysql-bin #多实例 log_bin_index = mysql-bin.index expire_logs_days = 14 max_binlog_size = 1G binlog_format = ROW binlog_cache_size = 16M sync_binlog = 1 binlog_rows_query_log_events = 1 ### LOGGING ### log_error_verbosity = 2 log_error = /xxx/mysql3306/log/mysql.err #多实例 general_log = 0 general_log_file = /xxx/mysql3306/log/mysql.log #多实例 ### SLOWLOG ### slow_query_log = 1 long_query_time = 0.3 slow_query_log_file = /xxx/mysql3306/log/mysql-slow.log #多实例 log_timestamps = SYSTEM ### CACHE AND LIMITS ### skip_name_resolve back_log = 1024 tmp_table_size = 32M max_heap_table_size = 32M max_prepared_stmt_count = 1048570 max_connections = 5000 max_user_connections = 4000 max_connect_errors = 1000000 open_files_limit = 65535 table_definition_cache = 4096 table_open_cache = 4096 thread_cache_size = 512 thread_stack = 192K sort_buffer_size = 2M join_buffer_size = 8M ###default 128K bulk_insert_buffer_size = 64M ###default 8M group_concat_max_len = 16K ###default 1024 max_allowed_packet = 64M ###default 16M ### Query Cache ### query_cache_type = 0 query_cache_size = 0 query_cache_limit = 2M query_cache_min_res_unit = 2K ### INNODB ### innodb_flush_method = O_DIRECT innodb_data_home_dir = /xxx/mysql3306/var/ #多实例 innodb_data_file_path = ibdata1:1G:autoextend innodb_temp_data_file_path = ibtmp1:1G:autoextend:max:2G innodb_log_group_home_dir = /xxx/mysql3306/var/ #多实例 innodb_log_files_in_group = 3 innodb_log_file_size = 2G innodb_log_buffer_size = 32M innodb_flush_log_at_trx_commit = 1 innodb_thread_concurrency = 64 innodb_file_per_table = 1 innodb_file_format = Barracuda innodb_flush_neighbors = 0 innodb_stats_persistent_sample_pages = 32 innodb_buffer_pool_size = 8G innodb_buffer_pool_instances = 8 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 50 innodb_read_io_threads = 16 ###default 4 innodb_write_io_threads = 16 ###default 4 innodb_io_capacity = 5000 innodb_change_buffering = all innodb_buffer_pool_load_at_startup = OFF innodb_buffer_pool_dump_at_shutdown = OFF innodb_support_xa = ON innodb_open_files = 4096 innodb_online_alter_log_max_size = 1G innodb_autoinc_lock_mode = 2 ### REPLICATION ### #read_only relay_log = relay-log relay_log_index = relay-log.index max_relay_log_size = 1G relay_log_purge = 1 relay_log_recovery = 1 sync_master_info = 0 sync_relay_log = 0 sync_relay_log_info = 0 slave_net_timeout = 60 log_slave_updates = 1 skip_slave_start slave_parallel_type = logical_clock slave_parallel_workers = 0 slave_preserve_commit_order = 1 slave_transaction_retries = 128 slave_pending_jobs_size_max = 1G slave_rows_search_algorithms = 'INDEX_SCAN,HASH_SCAN' ### GROUP COMMIT ### gtid_mode = ON enforce_gtid_consistency = ON master_info_repository = TABLE relay_log_info_repository = TABLE [mysqldump] quick max_allowed_packet = 64M [myisamchk] key_buffer_size = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M ``` ## 2.4.MySQL升降级inplace方式(课下实现) > inplace就地升级的方式有极大风险 mysql实例直接版本升级如果有业务容易发生未知问题,生产一般不会采用,后期课程待主从复制学完 讲解企业级Mysql实例在线升级 # 3.MySQL日志管理配置 ## 3.1.错误日志 ```sql 功能:记录启动-到关闭发生的 error,waring等信息 作用:定位数据库位置,死锁,异常, 配置: log_error_verbosity = 2 #1错误信息 2错误信息和告警信息; 3错误信息、告警信息和通知信息。 版本不同默认参数不同,8.0没有此参数 log_error = /xxx/mysql3306/log/mysql.err #多实例 ``` ### 3.2.二进制日志(binary log) ```sql 作用: 记录DML语句:引起数据修改或者删除的,记录所有操作,包括发生时间,执行时长等;不记录SELEC 主从复制 恢复数据 审计(audit) 配置: log_bin = /xxx/mysql3306/var/mysql-bin #多实例 log_bin_index = mysql-bin.index expire_logs_days = 14 max_binlog_size = 1G binlog_format = ROW binlog_cache_size = 16M sync_binlog = 1 binlog_rows_query_log_events = 1 查看: mysql> show variables like '%log_bin%'; #是否开启 已有的binlog: mysql> show binary logs; mysql> show master logs; ``` ## 3.3.慢日志 ```bash 慢日志 记录大于指定时间的SELECT或者未走index 的SQL show variables like '%slow%'; show variables like '%long%'; ``` ## 3.4.general log ```sql 作用:开启 general log 将所有到达MySQL Server的SQL语句记录下来 功能:排查故障使用 show variables like 'general_log'; -- 查看日志是否开启 set global general_log=on; -- 开启日志功能 show variables like 'general_log_file'; -- 看看日志文件保存位置 set global general_log_file='/chj/class/data/mysql3306/log/mysql.log'; -- 设置日志文件保存位置 show variables like 'log_output'; -- 看看日志输出类型 table或file set global log_output='table'; -- 设置输出类型为 table 写入mysql.slow_log set global log_output='file'; -- 设置输出类型为file 如何关闭: SET GLOBAL general_log = 'OFF'; RENAME TABLE mysql.general_log TO mysql.general_log2; DELETE FROM mysql.general_log2; ```
李延召
2024年3月18日 20:35
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码