Mysql体系结构
数据库:
- 物理操作系统文件或其他形式文件类型的集合
数据库实例:
- 由数据库后台进程/线程以及一个共享内存区域组成
- 共享内存可以被运行的后台 进程/线程所共享
- 数据库实例才是真正用来操作数据库文件的
创建database kaola
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.16 sec) mysql> create database kaola; Query OK, 1 row affected (0.01 sec)
删除数据库
mysql> drop database kaola;
Query OK, 0 rows affected (0.38 sec)
Mysql主要文件
数据库配置文件
- /etc/my.cnf【最优配置模板】
[client] user = root --用户 password = 1111aaA_ -- 密码 [mysql] prompt = [\u@\p][\d]>\_ -- cmd控制台前显示: node1 [localhost] {sa} (mysql) 而不是就是 mysql> no-auto-rehash --开启命令自动补全功能 [mysqld_safe] malloc-lib=tcmalloc --合适的内存分配算法tcmalloc,是谷歌提供的内存分配管理模块 [mysqldump] single-transaction [mysqld] # basic settings # user = mysql sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" autocommit = 1 --自动提交事务 server-id = 8888 --服务器ID character_set_server=utf8mb4 --服务器数据库的字符集合 datadir=/mysql_data/data --数据目录 transaction_isolation = READ-COMMITTED --数据库隔离级别 ,已提交读 explicit_defaults_for_timestamp = 1 -- max_allowed_packet = 64M --最大控制其通信缓冲区的server接受的数据包大小(lob字段) event_scheduler = 1 --开启事件调度 # connection # interactive_timeout = 1800 wait_timeout = 1800 lock_wait_timeout = 1800 skip_name_resolve = 1 max_connections = 1024 max_user_connections = 256 max_connect_errors = 1000000 # table cache performance settings table_open_cache = 4096 table_definition_cache = 4096 table_open_cache_instances = 64 # session memory settings # read_buffer_size = 16M read_rnd_buffer_size = 32M sort_buffer_size = 32M tmp_table_size = 64M join_buffer_size = 128M thread_cache_size = 64 # log settings # log_error = error.log log_bin = binlog log_error_verbosity = 2 general_log_file = general.log # slow log slow_query_log = 1 //开启慢sql日志 slow_query_log_file = slow.log //慢日志文件名 long_query_time = 2 //超过2秒的慢sql记录 min_examined_row_limit = 100 //至少执行100行的SQL才会被检测 log_queries_not_using_indexes = 1 //记录没有使用索引的查询 log_throttle_queries_not_using_indexes = 10 //限制每分钟记录没有使用索引SQL语句的次数 log_slow_admin_statements = 1 //管理命令执行慢的也放到慢日志里 log_slow_slave_statements = 1 //从库上执行的慢查询也放到慢日志 expire_logs_days = 90 --日志过期天数 log-bin-trust-function-creators = 1 log-slave-updates = 1 --从库产生binlog日志,从库就可以做主库 # innodb settings # innodb_page_size = 16384 innodb_buffer_pool_size = 160G innodb_buffer_pool_instances = 16 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_lru_scan_depth = 4096 innodb_lock_wait_timeout = 5 innodb_io_capacity = 10000 innodb_io_capacity_max = 20000 innodb_flush_method = O_DIRECT innodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_flush_neighbors = 0 innodb_log_file_size = 16G innodb_log_files_in_group = 2 innodb_log_buffer_size = 64M innodb_purge_threads = 4 innodb_large_prefix = 1 innodb_thread_concurrency = 64 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 innodb_sort_buffer_size = 128M innodb_write_io_threads = 16 innodb_read_io_threads = 16 innodb_file_per_table = 1 innodb_stats_persistent_sample_pages = 64 innodb_autoinc_lock_mode = 2 innodb_online_alter_log_max_size=1G innodb_open_files=4096 # replication settings # master_info_repository = TABLE --master_info存放到数据库表里 relay_log_info_repository = TABLE --relay_log_info存放到数据库表里 sync_binlog = 1 --异步日志提交 gtid_mode = on enforce_gtid_consistency = 1 log_slave_updates binlog_format = ROW --binlog使用row模式 binlog_rows_query_log_events = 1 relay_log = relay.log relay_log_recovery = 1 --relay_log出错或者中断,重新从master服务器抽取 slave_skip_errors = ddl_exist_errors slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN' # semi sync replication settings # plugin-load = "group_replication.so;validate_password.so;semisync_master.so;semisync_slave.so" loose_rpl_semi_sync_master_enabled = 1 loose_rpl_semi_sync_master_timeout = 3000 loose_rpl_semi_sync_slave_enabled = 1 # password plugin # validate_password_policy = STRONG validate-password = FORCE_PLUS_PERMANENT # perforamnce_schema settings performance-schema-instrument='memory/%=COUNTED' performance_schema_digests_size = 40000 performance_schema_max_table_instances = 40000 performance_schema_max_sql_text_length = 4096 performance_schema_max_digest_length = 4096 [mysqld-5.6] //-5.6代表这个参数只能在5.6上生效 # metalock performance settings //表示源数据有多少锁,5.7无锁这个参数没有 metadata_locks_hash_instances = 64 //表示源数据有多少锁 [mysqld-5.7] # new innodb settings # loose_innodb_numa_interleave = 1 innodb_buffer_pool_dump_pct = 40 innodb_page_cleaners = 16 innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 2G innodb_purge_rseg_truncate_frequency = 128 # new replication settings # slave-parallel-type = LOGICAL_CLOCK --开启组提交 slave-parallel-workers = 16 --组提交线程数16个 slave_preserve_commit_order = 1 slave_transaction_retries = 128 # other change settings # binlog_gtid_simple_recovery = 1 log_timestamps = system show_compatibility_56 = on # group replication settings plugin-load = "group_replication.so;validate_password.so;semisync_master.so;semisync_slave.so" transaction-write-set-extraction = XXHASH64 # report_host = 127.0.0.1 # optional for group replication # binlog_checksum = NONE # only for group replication loose_group_replication = FORCE_PLUS_PERMANENT loose_group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose_group_replication_compression_threshold = 100 loose_group_replication_flow_control_mode = 0 loose_group_replication_single_primary_mode = 0 loose_group_replication_enforce_update_everywhere_checks = 1 loose_group_replication_transaction_size_limit = 10485760 loose_group_replication_unreachable_majority_timeout = 120 loose_group_replication_start_on_boot = 0
表结构定义文件
在数据目录里没创建一张表,就会有一个*.frm文件,表结构定义文件
mysq utilities工具包
mysqlfrm 离线解析.frm文件工具
mysqlfrm --diagnostic xx,frm --server=root:密码@localhost
错误文件
参数:log_errpr
- 默认名:机器名.err
- 建议统一修改一个固定名字,例如mysql.err
[mysqkd] log_error = mysql.err
可将配置错误日志到系统日志文件[没啥必要]
[mysqld_safe] syslog syslog_tag = stock
慢查询日志【数据库查询很慢,看这个日志】
将运行超过某个时间阈值的SQL语句记录到文件
- 慢查询
- 默认名:机器名-slow.log
慢查询-相关参数
slow_query_log 开启慢查询日志 slow_query_log_file 慢查询日志文件名 long_query_time 指定慢查询阈值 min_examined_row_limit 扫描记录少于该值的SQL不记录到慢查询日志 log_queries_not_using_indexxes 将没有使用索引的SQL记录到慢查询日志 log_throttle_queries_not_using_indexes 限制每分钟记录没有使用索引SQL语句的次数 log_slow_admin_statement 记录管理操作,如ALTER/ANALYZE TABLE log_output 慢查询日志的格式 log_slow_slave_statements 在从服务器上开启慢查询日志 log_timestamps 写入时区信息
模拟慢查询,超出配置文件中设置的时间,sql语句就会被记录在慢查询日志里【没加min_examined_row_limit 】
mysql> select sleep(3); +----------+ | sleep(3) | +----------+ | 0 | +----------+ 1 row in set (3.35 sec)
[root@master01 sys]# cat /data/mysql-data/slow.log
/data/mysql/bin/mysqld, Version: 5.7.33-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /data/mysql/run/mysql.sock
Time Id Command Argument
# Time: 2021-06-07T08:45:54.851958Z
# User@Host: root[root] @ localhost [] Id: 3
# Query_time: 3.348062 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1623055554;
select sleep(3);
# Time: 2021-06-07T08:48:44.266693Z
# User@Host: root[root] @ localhost [] Id: 4
# Query_time: 4.000647 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1623055724;
select sleep(4);
关闭命令
mysql> show variables like 'slow%'; +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | slow.log | +---------------------+----------+ 3 rows in set (0.00 sec)
mysql> set global long_query_time = 3; Query OK, 0 rows affected (0.00 sec)
当slow.log文件过大的时候如何清空
如果使用echo "">/xxx/slow.log 命令,并不会释放磁盘空间
//1.先修改名称 mv slow.log slow.log-2021.6.7 //2.执行SQL语句,关闭句柄数,新建slow.log flush slow logs; //3.删除slow.log-2021.6.7
通用日志【开启性能下降明显,下降50%】
可以记录数据库所有相关操作
- 参数:general_log
- 默认文件名:机器名.log
同样可以将日志保存到表
- mysql.general_log
Mysql存储引擎
查看当前mysql数据库中有多少存储引擎
mysql> show engines \G
启动时可以禁用某些存储引擎
- --skip-archive
- --skip-blackhole
# engine skip-archive skip-blackhole
Memory存储引擎是不能禁用的
继续阅读

我的微信
这是我的微信扫一扫
评论