0%

记录信息

  1. 二进制日志记录 MySQL 数据库中所有与更新相关的操作,即二进制日志记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。常用于恢复数据库和主从复制。
  2. 二进制日志主要记录数据库的变化情况,因此可以用作主从库的同步。内容主要包括数据库所有的更新操作,use语句、insert语句、delete语句、update语句、create语句、alter语句、drop语句。用一句更简洁易懂的话概括就是:所有涉及数据变动的操作,都要记录进二进制日志中。

特性

  1. 只要重启了服务, binlog二进制日志就会自己滚动一个新的, 或者使用flush logs 手动滚动日志
  2. 记录的信息 主要是记录修改数据或有可能引起数据改变的MySql语句, 记录时间,操作时长,等等信息
  3. 日志格式: 基于(语句, row, mixed) 默认mixed
  4. 每一个二进制日志叫做一个Binary log event(二进制日志事件), 每一个二进制日志事件都有自己的元数据(meta data)信息, 时间,操作时长….
  5. 每个二进制日志的上限是1G
阅读全文 »

说明

  1. 记录执行时间超过指定时间(long_query_time,默认10s)的查询语句(包括dml和ddl等)
  2. 慢查询日志默认不启动
  3. 慢查询日志支持将日志写入文件或数据库表中
  4. 优点:可以有效的跟踪 执行时间过长 或者 没有使用索引的查询语句(包括select 语句,update语句,delete语句,以及insert语句)
  5. 缺点:存在性能损耗,不建议默认开启
  6. 慢查询日志只包含成功执行过的查询语句
阅读全文 »

说明

默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,

  1. insert查询为了避免数据冲突,如果此前插入过数据,而如果跟主键或唯一键的数据重复那肯定会报错
  2. update时也会查询因为更新的时候很可能会更新某一块数据
  3. delete查询,只删除符合条件的数据

MySQL普通查询日志记录MySQL服务实例所有的操作,如select、update、insert、delete等操作,无论该操作是否成功执行。还有MySQL客户机与MySQL服务端连接及断开的相关信息,无论连接成功还是失败。
注意:由于普通查询日志几乎记录了MySQL的所有操作,对于数据访问频繁的数据库服务器而言,如果开启MySQL的普通查询日志将会大幅度的降低数据库的性能,因此建议关闭普通查询日志。只有在特殊时期,如需要追踪某些特殊的查询日志,可以临时打开普通的查询日志。在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

  1. log = on|off 是否开启日志功能, 这个设置包含了查询日志和慢查询日志
  2. general_log = on|off 是否开启查询日志
  3. general_log_file = /path/to/file 指定查询日志的位置
  4. log_output = FILE|table 日志输出的位置, 这个指令对慢查询日志也起作用
阅读全文 »

说明

在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。
错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。

阅读全文 »

日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。

默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,出现日志刷新

mysql日志分类:错误日志、查询日志、慢查询日志、事务日志、二进制日志;

官网:https://dev.mysql.com/doc/refman/5.7/en/server-logs.html

阅读全文 »

   Variable_name       作用域       说明   
   Aborted_clients       Global       由于客户端没有正确关闭连接导致客户端终止而中断的连接数   
   Aborted_connects       Global       试图连接到MySQL服务器而失败的连接数   
   Binlog_cache_disk_use       Global       使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量   
   Binlog_cache_use       Global       使用临时二进制日志缓存的事务数量   
   Binlog_stmt_cache_disk_use                   
   Binlog_stmt_cache_use                   
   Bytes_received       Both       从所有客户端接收到的字节数。   
   Bytes_sent       Both       发送给所有客户端的字节数。   
   Com_admin_commands                   
   Com_assign_to_keycache                   
   Com_alter_db                   
   Com_alter_db_upgrade                   
   Com_alter_event                   
   Com_alter_function                   
   Com_alter_instance                   
   Com_alter_procedure                   
   Com_alter_server                   
   Com_alter_table                   
   Com_alter_tablespace                   
   Com_alter_user                   
   Com_analyze                   
   Com_begin                   
   Com_binlog                   
   Com_call_procedure                   
   Com_change_db                   
   Com_change_master                   
   Com_change_repl_filter                   
   Com_check                   
   Com_checksum                   
   Com_commit                   
   Com_create_db                   
   Com_create_event                   
   Com_create_function                   
   Com_create_index                   
   Com_create_procedure                   
   Com_create_server                   
   Com_create_table                   
   Com_create_trigger                   
   Com_create_udf                   
   Com_create_user                   
   Com_create_view                   
   Com_dealloc_sql                   
   Com_delete                   
   Com_delete_multi                   
   Com_do                   
   Com_drop_db                   
   Com_drop_event                   
   Com_drop_function                   
   Com_drop_index                   
   Com_drop_procedure                   
   Com_drop_server                   
   Com_drop_table                   
   Com_drop_trigger                   
   Com_drop_user                   
   Com_drop_view                   
   Com_empty_query                   
   Com_execute_sql                   
   Com_explain_other                   
   Com_flush                   
   Com_get_diagnostics                   
   Com_grant                   
   Com_ha_close                   
   Com_ha_open                   
   Com_ha_read                   
   Com_help                   
   Com_insert                   
   Com_insert_select                   
   Com_install_plugin                   
   Com_kill                   
   Com_load                   
   Com_lock_tables                   
   Com_optimize                   
   Com_preload_keys                   
   Com_prepare_sql                   
   Com_purge                   
   Com_purge_before_date                   
   Com_release_savepoint                   
   Com_rename_table                   
   Com_rename_user                   
   Com_repair                   
   Com_replace                   
   Com_replace_select                   
   Com_reset                   
   Com_resignal                   
   Com_revoke                   
   Com_revoke_all                   
   Com_rollback                   
   Com_rollback_to_savepoint                   
   Com_savepoint                   
   Com_select                   
   Com_set_option                   
   Com_signal                   
   Com_show_binlog_events                   
   Com_show_binlogs                   
   Com_show_charsets                   
   Com_show_collations                   
   Com_show_create_db                   
   Com_show_create_event                   
   Com_show_create_func                   
   Com_show_create_proc                   
   Com_show_create_table                   
   Com_show_create_trigger                   
   Com_show_databases                   
   Com_show_engine_logs                   
   Com_show_engine_mutex                   
   Com_show_engine_status                   
   Com_show_events                   
   Com_show_errors                   
   Com_show_fields                   
   Com_show_function_code                   
   Com_show_function_status                   
   Com_show_grants                   
   Com_show_keys                   
   Com_show_master_status                   
   Com_show_open_tables                   
   Com_show_plugins                   
   Com_show_privileges                   
   Com_show_procedure_code                   
   Com_show_procedure_status                   
   Com_show_processlist                   
   Com_show_profile                   
   Com_show_profiles                   
   Com_show_relaylog_events                   
   Com_show_slave_hosts                   
   Com_show_slave_status                   
   Com_show_status                   
   Com_show_storage_engines                   
   Com_show_table_status                   
   Com_show_tables                   
   Com_show_triggers                   
   Com_show_variables                   
   Com_show_warnings                   
   Com_show_create_user                   
   Com_shutdown                   
   Com_slave_start                   
   Com_slave_stop                   
   Com_group_replication_start                   
   Com_group_replication_stop                   
   Com_stmt_execute                   
   Com_stmt_close                   
   Com_stmt_fetch                   
   Com_stmt_prepare                   
   Com_stmt_reset                   
   Com_stmt_send_long_data                   
   Com_truncate                   
   Com_uninstall_plugin                   
   Com_unlock_tables                   
   Com_update                   
   Com_update_multi                   
   Com_xa_commit                   
   Com_xa_end                   
   Com_xa_prepare                   
   Com_xa_recover                   
   Com_xa_rollback                   
   Com_xa_start                   
   Com_stmt_reprepare                   
   Compression       Session           客户端与服务器之间是否启用压缩协议   
   Connection_errors_accept                   
   Connection_errors_internal                   
   Connection_errors_max_connections                   
   Connection_errors_peer_address                   
   Connection_errors_select                   
   Connection_errors_tcpwrap                   
   Connections       Global       试图连接到(不管是否成功)MySQL服务器的连接数   
   Created_tmp_disk_tables       Both       服务器执行语句时在硬盘上自动创建的临时表的数量   
   Created_tmp_files       Global       mysqld已经创建的临时文件的数量   
   Created_tmp_tables       Both       服务器执行语句时自动创建的内存中的临时表的数量。如果Created_tmp_disk_tables较大,你可能要增加tmp_table_size值使临时   表基于内存而不基于硬盘   
   Delayed_errors       Global       用INSERT DELAYED写的出现错误的行数(可能为duplicate   key)。   
   Delayed_insert_threads       Global       使用的INSERT DELAYED处理器线程数。   
   Delayed_writes       Global       写入的INSERT DELAYED行数   
   Flush_commands       Global       执行的FLUSH语句数。   
   Handler_commit       Both       内部提交语句数   
   Handler_delete       Both       行从表中删除的次数。   
   Handler_discover       Both       MySQL服务器可以问NDB   CLUSTER存储引擎是否知道某一名字的表。这被称作发现。Handler_discover说明通过该方法发现的次数。   
   Handler_external_lock                   
   Handler_mrr_init                   
   Handler_prepare       Both       A   counter for the prepare phase of two-phase commit operations.   
   Handler_read_first       Both       索引中第一条被读的次数。如果较高,它建议服务器正执行大量全索引扫描;例如,SELECT   col1 FROM foo,假定col1有索引。   
   Handler_read_key       Both       根据键读一行的请求数。如果较高,说明查询和表的索引正确。   
   Handler_read_last       Both           
   Handler_read_next       Both       按照键顺序读下一行的请求数。如果你用范围约束或如果执行索引扫描来查询索引列,该值增加。   
   Handler_read_prev       Both       按照键顺序读前一行的请求数。该读方法主要用于优化ORDER BY ... DESC。   
   Handler_read_rnd       Both       根据固定位置读一行的请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表的查询或你的连接没有正确使用键。   
   Handler_read_rnd_next       Both       在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。   
   Handler_rollback       Both       内部ROLLBACK语句的数量。   
   Handler_savepoint       Both       在一个存储引擎放置一个保存点的请求数量。   
   Handler_savepoint_rollback       Both       在一个存储引擎的要求回滚到一个保存点数目。   
   Handler_update       Both       在表内更新一行的请求数。   
   Handler_write       Both       在表内插入一行的请求数。   
   Innodb_buffer_pool_dump_status       Global           
   Innodb_buffer_pool_load_status       Global           
   Innodb_buffer_pool_resize_status       Global           
   Innodb_buffer_pool_pages_data       Global       包含数据的页数(脏或干净)。   
   Innodb_buffer_pool_bytes_data       Global           
   Innodb_buffer_pool_pages_dirty       Global       当前的脏页数。   
   Innodb_buffer_pool_bytes_dirty       Global           
   Innodb_buffer_pool_pages_flushed       Global       要求清空的缓冲池页数   
   Innodb_buffer_pool_pages_free       Global       空页数。   
   Innodb_buffer_pool_pages_latched       Global       在InnoDB缓冲池中锁定的页数。这是当前正读或写或由于其它原因不能清空或删除的页数。   
   Innodb_buffer_pool_pages_misc       Global       忙的页数,因为它们已经被分配优先用作管理,例如行锁定或适用的哈希索引。该值还可以计算为Innodb_buffer_pool_pages_total - Innodb_buffer_pool_pages_free -   Innodb_buffer_pool_pages_data。   
   Innodb_buffer_pool_pages_total       Global       缓冲池总大小(页数)。   
   Innodb_buffer_pool_read_ahead_rnd       Global       InnoDB初始化的“随机”read-aheads数。当查询以随机顺序扫描表的一大部分时发生。   
   Innodb_buffer_pool_read_ahead       Global           
   Innodb_buffer_pool_read_ahead_evicted       Global           
   Innodb_buffer_pool_read_ahead_seq       Global       InnoDB初始化的顺序read-aheads数。当InnoDB执行顺序全表扫描时发生。   
   Innodb_buffer_pool_read_requests       Global       InnoDB已经完成的逻辑读请求数。   
   Innodb_buffer_pool_reads       Global       不能满足InnoDB必须单页读取的缓冲池中的逻辑读数量。   
   Innodb_buffer_pool_wait_free       Global       一般情况,通过后台向InnoDB缓冲池写。但是,如果需要读或创建页,并且没有干净的页可用,则它还需要先等待页面清空。该计数器对等待实例进行记数。如果已经适当设置缓冲池大小,该值应小。   
   Innodb_buffer_pool_write_requests       Global       向InnoDB缓冲池的写数量。   
   Innodb_data_fsyncs       Global       fsync()操作数。   
   Innodb_data_pending_fsyncs       Global       当前挂起的fsync()操作数。   
   Innodb_data_pending_reads       Global       当前挂起的读数。   
   Innodb_data_pending_writes       Global       当前挂起的写数。   
   Innodb_data_read       Global       至此已经读取的数据数量(字节)。   
   Innodb_data_reads       Global       数据读总数量。   
   Innodb_data_writes       Global       数据写总数量。   
   Innodb_data_written       Global       至此已经写入的数据量(字节)。   
   Innodb_dblwr_pages_written       Global       已经执行的双写操作数量   
   Innodb_dblwr_writes       Global       双写操作已经写好的页数   
   Innodb_log_waits       Global       我们必须等待的时间,因为日志缓冲区太小,我们在继续前必须先等待对它清空   
   Innodb_log_write_requests       Global       日志写请求数。   
   Innodb_log_writes       Global       向日志文件的物理写数量。   
   Innodb_os_log_fsyncs       Global       向日志文件完成的fsync()写数量。   
   Innodb_os_log_pending_fsyncs       Global       挂起的日志文件fsync()操作数量。   
   Innodb_os_log_pending_writes       Global       挂起的日志文件写操作   
   Innodb_os_log_written       Global       写入日志文件的字节数。   
   Innodb_page_size       Global       编译的InnoDB页大小(默认16KB)。许多值用页来记数;页的大小很容易转换为字节。   
   Innodb_pages_created       Global       创建的页数。   
   Innodb_pages_read       Global       读取的页数。   
   Innodb_pages_written       Global       写入的页数。   
   Innodb_row_lock_current_waits       Global       当前等待的待锁定的行数。   
   Innodb_row_lock_time       Global       行锁定花费的总时间,单位毫秒。   
   Innodb_row_lock_time_avg       Global       行锁定的平均时间,单位毫秒。   
   Innodb_row_lock_time_max       Global       行锁定的最长时间,单位毫秒。   
   Innodb_row_lock_waits       Global       一行锁定必须等待的时间数。   
   Innodb_rows_deleted       Global       从InnoDB表删除的行数。   
   Innodb_rows_inserted       Global       插入到InnoDB表的行数。   
   Innodb_rows_read       Global       从InnoDB表读取的行数。   
   Innodb_rows_updated       Global       InnoDB表内更新的行数。   
   Innodb_num_open_files       Global           
   Innodb_truncated_status_writes       Global           
   Innodb_available_undo_logs       Global           
   Key_blocks_not_flushed       Global       键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。   
   Key_blocks_unused       Global       键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存   
   Key_blocks_used       Global       键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。   
   Key_read_requests       Global       从缓存读键的数据块的请求数。   
   Key_reads       Global       从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用Key_reads/Key_read_requests计算缓存损失率。   
   Key_write_requests       Global       将键的数据块写入缓存的请求数。   
   Key_writes       Global       向硬盘写入将键的数据块的物理写操作的次数。   
   Last_query_cost       Session       用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。 默认值是0。Last_query_cost具有会话范围。   
   Last_query_partial_plans                   
   Locked_connects                   
   Max_execution_time_exceeded                   
   Max_execution_time_set                   
   Max_execution_time_set_failed                   
   Max_used_connections       Global       服务器启动后已经同时使用的连接的最大数量。   
   Max_used_connections_time                   
   Not_flushed_delayed_rows       Global       等待写入INSERT DELAY队列的行数。   
   Ongoing_anonymous_transaction_count                   
   Open_files       Global       打开的文件的数目。   
   Open_streams       Global       打开的流的数量(主要用于记录)。   
   Open_table_definitions       Global       缓存的.frm文件数量   
   Open_tables       Both       当前打开的表的数量。   
   Opened_files       Global       文件打开的数量。不包括诸如套接字或管道其他类型的文件。   也不包括存储引擎用来做自己的内部功能的文件。   
   Opened_table_definitions       Both       已经缓存的.frm文件数量   
   Opened_tables       Both       已经打开的表的数量。如果Opened_tables较大,table_cache   值可能太小。   
   Performance_schema_accounts_lost                   
   Performance_schema_cond_classes_lost                   
   Performance_schema_cond_instances_lost                   
   Performance_schema_digest_lost                   
   Performance_schema_file_classes_lost                   
   Performance_schema_file_handles_lost                   
   Performance_schema_file_instances_lost                   
   Performance_schema_hosts_lost                   
   Performance_schema_index_stat_lost                   
   Performance_schema_locker_lost                   
   Performance_schema_memory_classes_lost                   
   Performance_schema_metadata_lock_lost                   
   Performance_schema_mutex_classes_lost                   
   Performance_schema_mutex_instances_lost                   
   Performance_schema_nested_statement_lost                   
   Performance_schema_prepared_statements_lost                   
   Performance_schema_program_lost                   
   Performance_schema_rwlock_classes_lost                   
   Performance_schema_rwlock_instances_lost                   
   Performance_schema_session_connect_attrs_lost                   
   Performance_schema_socket_classes_lost                   
   Performance_schema_socket_instances_lost                   
   Performance_schema_stage_classes_lost                   
   Performance_schema_statement_classes_lost                   
   Performance_schema_table_handles_lost                   
   Performance_schema_table_instances_lost                   
   Performance_schema_table_lock_stat_lost                   
   Performance_schema_thread_classes_lost                   
   Performance_schema_thread_instances_lost                   
   Performance_schema_users_lost                   
   Prepared_stmt_count       Global       当前的预处理语句的数量。 (最大数为系统变量:   max_prepared_stmt_count)    
   Qcache_free_blocks       Global       查询缓存内自由内存块的数量。   
   Qcache_free_memory       Global       用于查询缓存的自由内存的数量。   
   Qcache_hits       Global       查询缓存被访问的次数。   
   Qcache_inserts       Global       加入到缓存的查询数量。   
   Qcache_lowmem_prunes       Global       由于内存较少从缓存删除的查询数量。   
   Qcache_not_cached       Global       非缓存查询数(不可缓存,或由于query_cache_type设定值未缓存)。   
   Qcache_queries_in_cache       Global       登记到缓存内的查询的数量。   
   Qcache_total_blocks       Global       查询缓存内的总块数。   
   Queries       Both       服务器执行的请求个数,包含存储过程中的请求。   
   Questions       Both       已经发送给服务器的查询的个数。   
   Select_full_join       Both       没有使用索引的联接的数量。如果该值不为0,你应仔细检查表的索引   
   Select_full_range_join       Both       在引用的表中使用范围搜索的联接的数量。   
   Select_range       Both       在第一个表中使用范围的联接的数量。一般情况不是关键问题,即使该值相当大。   
   Select_range_check       Both       在每一行数据后对键值进行检查的不带键值的联接的数量。如果不为0,你应仔细检查表的索引。   
   Select_scan       Both       对第一个表进行完全扫描的联接的数量。   
   Slave_heartbeat_period       Global       复制的心跳间隔   
   Slave_open_temp_tables       Global       从服务器打开的临时表数量   
   Slave_received_heartbeats       Global       从服务器心跳数   
   Slave_retried_transactions       Global       本次启动以来从服务器复制线程重试次数   
   Slave_running       Global       如果该服务器是连接到主服务器的从服务器,则该值为ON。   
   Slow_launch_threads       Both       创建时间超过slow_launch_time秒的线程数。   
   Slow_queries       Both       查询时间超过long_query_time秒的查询的个数   
   Sort_merge_passes       Both       排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值。   
   Sort_range       Both       在范围内执行的排序的数量。   
   Sort_rows       Both       已经排序的行数。   
   Sort_scan       Both       通过扫描表完成的排序的数量。   
   Ssl_accept_renegotiates                   
   Ssl_accepts                   
   Ssl_callback_cache_hits                   
   Ssl_cipher                   
   Ssl_cipher_list                   
   Ssl_client_connects                   
   Ssl_connect_renegotiates                   
   Ssl_ctx_verify_depth                   
   Ssl_ctx_verify_mode                   
   Ssl_default_timeout                   
   Ssl_finished_accepts                   
   Ssl_finished_connects                   
   Ssl_server_not_after                   
   Ssl_server_not_before                   
   Ssl_session_cache_hits                   
   Ssl_session_cache_misses                   
   Ssl_session_cache_mode                   
   Ssl_session_cache_overflows                   
   Ssl_session_cache_size                   
   Ssl_session_cache_timeouts                   
   Ssl_sessions_reused                   
   Ssl_used_session_cache_entries                   
   Ssl_verify_depth                   
   Ssl_verify_mode                   
   Ssl_version                   
   Table_locks_immediate       Global       立即获得的表的锁的次数。   
   Table_locks_waited       Global       不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。   
   Table_open_cache_hits                   
   Table_open_cache_misses                   
   Table_open_cache_overflows                   
   Tc_log_max_pages_used                   
   Tc_log_page_size                   
   Tc_log_page_waits                   
   Threads_cached       Global       线程缓存内的线程的数量。   
   Threads_connected       Global       当前打开的连接的数量。   
   Threads_created       Global       创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。缓存访问率的计算方法Threads_created/Connections。   
   Threads_running       Global       激活的(非睡眠状态)线程数。   
   Uptime       Global       服务器已经运行的时间(以秒为单位)。   
   Uptime_since_flush_status       Global       最近一次使用FLUSH STATUS 的时间(以秒为单位)。   

参考

  1. MySQL运行状态show status中文详解
  2. Mysql官方文档

互为主从复制

背景

在一些高可用的环境中,mysql的主从不能满足现实中的一些实际需求。比如,一些流量大的网站数据库访问有了瓶颈,需要负载均衡的时候就用两个或者多个的mysql服务器,而这些mysql服务器的数据库数据必须要保持一致,那么就会用到主主复制。

mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全。在这种架构中如果从上的数据做了改变,主数据是不会用任何变化的。因为mysql主从架构主要是mysql从监控mysql主的日志变化来实现同步,相反的在这个架构中主并没有监控从的日志变化。所以,mysql从数据反生变化,主也就没有什么变化了。

通过上述描述,可以看到如果想实现主主复制,无非就是在mysql主从架构上让mysql主实现监测从的日志变化,从而实现两台机器相互同步。

阅读全文 »

说明

备份的目的

  1. 做灾难恢复:对损坏的数据进行恢复和还原
  2. 需求改变:因需求改变而需要把数据还原到改变以前
  3. 测试:测试新功能是否可用

备份需要考虑的问题

  1. 可以容忍丢失多长时间的数据;
  2. 恢复数据要在多长时间内完;
  3. 恢复的时候是否需要持续提供服务;
  4. 恢复的对象,是整个库,多个表,还是单个库,单个表。
阅读全文 »

优化技巧

  1. 配置文件的快速查找
    1
    2
    3
    4
    /usr/libexec/mysqld --verbose --help|grep -A 1 'Default options'
    200815 16:01:04 [Note] Plugin 'FEEDBACK' is disabled.
    Default options are read from the following files in the given order:
    /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
  2. 配置项使用小写,单词之间使用横线或下划线分隔,并且使用统一的规范
  3. 作用域:全局、会话、对象
阅读全文 »

下面是72GB内存生产环境中my.cnf配置文件,读者可以作为一个优化参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
############################缓存配置整体说明############################################
## global_buffers 在内存中缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能
## 计算公式: Innodb_buffer_pool_size +
## Innodb_additional_mem_pool_size +
## Innodb_log_buffer_size +
## key_buffer_size +
## query_cache_size
##
##
## per_thread_buffers 线程独享内存大小
## 计算公式(
## read_buffer_size +
## read_rnd_buffer_size +
## sort_buffer_size +
## thread_stack +
## join_buffer_size +
## binlog_cache_size )* max_connections

## 注意:global_buffers + per_thread_buffers不能大于实际物理内存,
## 否者并发量大时会造成内存溢出、系统死机 !
############################缓存配置整体说明############################################
# MySQL configuration for 72G memory
#定义客户端连接信息,端口号、socket 存放位置
[client]
port    = 3306
socket  = /tmp/mysql.sock

# The MySQL server
#########Basic##################
# Mysql 基本信息,端口号、socket、安装目录、数据存放目录、临时目录
[mysqld]

# Mysql Server 唯一标识,用来做主同同步( 主从时开启 )
server-id= 22
port     = 3306
user     = mysql
basedir  = /usr/local/mysql
datadir  = /mysqlData/data
tmpdir   = /mysqlData/tmp
socket   = /tmp/mysql.sock

# 避免Mysql外部锁定,减少出错几率、增强稳定性
skip-external-locking

# 禁止 Mysql对外部连接进行DNS解析,加快连接速度。开启后所有远程连接主机只能使用IP的方式
skip-name-resolve

lower_case_table_names = 1

# 禁止 SQL 读取本地文件
local-infile = 0

# 默认存储引擎
default-storage-engine = INNODB

# 默认字符集 utf8
character-set-server = utf8

# wait_timeout默认是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection
# 如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误
# 如果这个值很低,可能会导致出现 "ERROR 2006 (HY000) MySQL server has gone away" 的错误,
# 出现这个错误还有可能是max_allowed_packet设置过小

# 数据库连接池如果没有配置正确,会导致连接失效,wait_timeout与interactive_timeout要同时设置
# 数据库连接池中需要配置的存活时间小于数据库中的时间,或者通过定期检查链接的状态

# 服务器关闭非交互连接之前等待活动的秒数(Mysql处理完一条连接后所等待释放的时间)。
wait_timeout = 100

# 服务器关闭交互式连接前等待活动的秒数。
interactive_timeout = 100

# mysql客户端在尝试与mysql服务器建立连接时,
# mysql服务器返回错误握手协议前等待客户端数据包的最大时限。默认10秒。
connect_timeout = 20

# 在MYSQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中
# Mysql 连接请求队列存放数,当某一时刻客户端连接请求过多,
# 造成 Mysql Server 无法为其建立连接时存放的数量,
# 最大 65535( 增大时需同时调整 OS 级别的网络监听队列限制 ),默认50
back_log = 500

myisam_recover
event_scheduler = ON

#########general_log,一般不开启##

# 开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘 IO 开销,影响性能
# general_log = on

# 查询日志存放位置及文件名
# general_log_file = /usr/local/mysql/data/mysql.log


#########binlog##################
# 开启 binlog ( 二进制 ) 日志,主要用来做增量备份跟主从同步
log-bin = /mysqlLog/logs/mysql-bin

# Mysql binlog 的日志格式,Statement、ROW 跟 Mixed( 混合模式 )
binlog_format = row

max_binlog_size = 28M

# 二进制日志缓冲大小,此参数是为每 Session 单独分配的
# 当一个线程开始一个事务时,Mysql就会为此Session分配一个binlog cache,
# 当这个事务提交时,binlog cache 中的数据被写入 binlog 文件
# 通过 show status like 'binlog_cache%'; 查看使用 binlog cache 的次数及使用磁盘的次数
binlog_cache_size = 2M

# 重要参数,不仅影响到 binlog 对 Mysql 所带来的性能损耗,还影响到 Mysql 中数据的完整性。
# 0:代表事务提交后,Mysql 不做 fsync 之类的磁盘同步指令刷新 binlog_cache 中的信息到磁盘
# 而让 Filesystem 自行决定什么时候同步,或者 cache 满了之后才同步磁盘。
#
# n:代表进行 n 次事务提交后,Mysql 将进行一次 fsync 之类的磁盘同步指令来将
#
# binlog_cache 中的数据强制写入磁盘。
# 默认0 ,即不做任何强制性的磁盘刷新指令,性能最好,但是风险也最大。
# 当系统崩溃时 binlog_cache 中的所有 binlog 信息都会丢失。
#
# 1,是最安全但是性能损耗最大。当系统崩溃时,
# 最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有实质性的影响。
sync_binlog = 0

# 保留5天的binlog日志,系统重启、执行 flush logs或binlog日志文件大小达到上限时删除 binlog日志
expire-logs-days = 5

#########replication#############
# mysql从复制连结等待读取数据的最大时限,默认3600秒。
slave-net-timeout                  = 10
rpl_semi_sync_master_enabled       = 1
rpl_semi_sync_master_wait_no_slave = 1
rpl_semi_sync_master_timeout       = 1000
rpl_semi_sync_slave_enabled        = 1
skip-slave-start
log_slave_updates                  = 1
relay_log_recovery                 = 1

#########slow log#############

# 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句
#( 一般临时开启即可 )
slow_query_log = 1

# 定义慢查询日志存放位置
slow_query_log_file = /mysqlLog/logs/mysql.slow

# 定义执行时间超过多少秒为慢查询,默认 10s
long_query_time = 2

#########error log#############
# 错误日志位置跟文件名
log-error  = /mysqlLog/logs/error.log

# 如果此参数不开启,error_log 中会有警告信息
explicit_defaults_for_timestamp = 1


#######per_thread_buffers############

# 查看最大连接数:show variables like '%max_connections%';
# 修改最大连接数:set GLOBAL max_connections = 200;(重启后失效)或则直接修改配置文件
# 默认100,最大值16384
# 使用命令show processlist; 可以查询相关(root所有,其他账号只显示自己相关的)的连接信息,
# 显示100条,使用show full processlist; 可列出所有
#
# Mysql 最大连接数,直接影响 Mysql 应用的并发处理能力
# 500~1000 是个比较合适的值,注意每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存
max_connections=1024

max_user_connections=1000

# 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关
# 设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host的连接请求,
# 直到mysql服务器重启或通过flush hosts命令清空此host的相关信息,默认100
max_connect_errors=10000

# 用来缓存 MyISAM 存储引擎的索引( 默认 8M ,如果使用 Innodb 存储引擎,此值设为 64M 或更小 )
# 计算公式:key_reads / key_read_requests * 100% 的值小于 0.1%
# 增加它可以得到更好的索引处理性能
key_buffer_size = 64M

# 网络传输中一次消息量的最大值,默认 4M ,必须设为 1024 的整倍数
max_allowed_packet = 128M

# 指示表调整缓冲区大小。
# table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。
# 因此, table_cache 的大小应与 max_connections 的设置有关。
# 例如,对于 200 个并行运行的连接,应该让表的缓存至少有 200 × N ,这里 N 是应用可以执行的查询的一个联接中表的最大数量。
# 此外,还需要为临时表和文件保留一些额外的文件描述符。
# 当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;
# 如果还没有被缓存,但是在 Mysql 表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区;
# 如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。
# 执行 flush tables 会清空缓存的内容。
# 一般来说,可以通过查看数据库运行峰值时间的状态值 Open_tables 和 Opened_tables ,判断是否需要增加 table_cache 的值
#(其中 open_tables 是当前打开的表的数量, Opened_tables 则是已经打开的表的数量)
# 即如果open_tables接近table_cache的时候,并且Opened_tables这个值在逐步增加,那就要考虑增加这个值的大小了。
# 还有就是Table_locks_waited比较高的时候,也需要增加table_cache。
table_cache = 3096

# 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源( 对性能有影响,默认 2000
table_open_cache = 6144

table_definition_cache = 4096

# 系统中对数据进行排序时使用的 buffer ,如果系统中排序比较大,且内存充足、并发不大时,可以适当增大此值( 默认 256K ,此参数为每线程分配独立的 buffer )
# Sort_Buffer_Size 是一个connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。
# Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存
# Sort_Buffer_Size 超过2KB的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低。
# 技术导读 http://blog.webshuo.com/2011/02/16/mysql-sort_buffer_size/
# dev-doc: http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html
# explain select*from table where order limit;出现filesort
# 属重点优化参数

sort_buffer_size = 512K

# Mysql 读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,,MySql会为它分配一段内存缓冲区。
# Mysql 会为其分配一段内存缓冲区( 默认 128K ,此参数为每线程分配 )
# read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,
# 并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
# 和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

read_buffer_size = 512K

# Mysql 随机 Query 缓冲区大小,当按任意顺序读取行时,将分配一个随机读取缓冲区。如进行排序查询时,Mysql 会首先扫描该缓冲,避免磁盘搜索,提高查询速度( 默认 256K ,该缓冲也是为每线程分配 )
read_rnd_buffer_size = 512k

# joinALL、index、rang 或 index_merge 时使用的 buffer( 默认 256K ,每 Thread 都会建立自己独立的 buffer )
join_buffer_size = 512K

# 临时表大小,默认大小是 32M
# 如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,
# 如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。如果超过该值,则会将临时表写入磁盘。
tmp_table_size = 64M
max_heap_table_size = 64M

# 是否启用 query_cache ,0 为不使用( 若要关闭 query_cache 时,需同时将 query_cache_size 、query_cache_limit 设为 0
query_cache_type=0


# 工作原理:一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,
# DB在该表没发生变化的情况下把结果从缓存中返回给Client。
# 这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。
# 如果该表在发生变更时,Query_cache里的数据又怎么处理呢?首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。
# 如果Query_cache非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。
# 所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。而且在高并发,写入量大的系统,建议把该功能禁掉。
# 重点优化参数(主库 增删改-MyISAM)
# 查询缓冲大小,当重复查询时会直接从该缓冲中获取,但是当所查询表有改变时,缓冲的查询将失效( 频繁写入、更新、高并发的环境下建议关闭此缓冲 )

query_cache_size = 0

# 单个查询所能够使用的缓冲区大小,缺省为1M
query_cache_limit = 1M

# 使用全文索引最小长度
ft_min_word_len = 1

# 默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费
# 查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
# 如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
# 查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
# 查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;
# 查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
# 查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
query_cache_min_res_unit = 2k

# 批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 32M

## Thread Cache 池中存放的连接线程数( 此池中的线程不是启动服务时就创建的,而是随着连接线程的创建和使用,逐渐将用完的线程存入其中,达到此值后将不再缓存连接线程 )
## 缓存命中率计算公式:Thread_Cache_Hit = ( Connections - Thread_created ) / Connections * 100%
## 系统运行一段时间后,Thread Cache 命中率应该保持在 90% 以上
# 服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,
# 当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,
# 如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.
# 通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。
# 设置规则如下:1GB 内存配置为82GB配置为163GB配置为324GB或更高内存,可配置更大。
thread_cache_size = 64

# 设置thread_concurrency的值的正确与否, 对mysql的性能影响很大,
# 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。
# thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8
# 属重点优化参数
thread_concurrency = 32

# 每线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128K至4GB,默认为192KB。
thread_stack = 256K
######### InnoDB #############
innodb_data_home_dir = /mysqlData/data
innodb_log_group_home_dir = /mysqlLog/logs

# 指定一个大小为 2G 的、可扩展的 ibdata1 数据文件
innodb_data_file_path = ibdata1:2G:autoextend

# Innodb 存储引擎核心参数,用于缓存 Innodb 表的索引、数据( 默认 128M ,单独使用 Innodb 存储引擎且单一 Mysql 服务时建议设为物理内存的 70% - 80 %
# 可以通过 show status like 'innodb_buffer_pool_%'; 来获取 innodb buffer pool 的实时状态信息
## Innodb_buffer_pool_pages_total 总共的 pages( Innodb 存储引擎中所有数据存放最小物理单位 page ,每个 page 默认为 16KB )
## Innodb_buffer_pool_pages_free 空闲的 pages
## Innodb_buffer_pool_pages_data 有数据的 pages
## Innodb_buffer_pool_read_requests 总共的 read 请求次数
## Innodb_buffer_pool_reads 读取物理磁盘读取数据的次数,即:在 buffer pool 中没有找到
## Innodb_buffer_pool_wait_free 因 buffer 空间不足而产生的 wait_free
## Innodb_buffer_pool_read_ahead_rnd 记录进行随机读的时候产生的预读次数
## Innodb_buffer_pool_read_ahead_seq 记录连续读的时候产生的预读次数
## Innodb_buffer_pool_size 使用率 = innodb_buffer_pool_pages_data / innodb_buffer_pool_pages_total * 100%
## Innodb_buffer_pool_read 命中率 = ( innodb_buffer_pool_read_requests - innodb_buffer_pool_reads )/ innodb_buffer_pool_read_requests * 100%

innodb_buffer_pool_size = 50G

innodb_buffer_pool_instances = 8

# 使用系统自带的内存分配器,替代 innodb_additional_mem_pool_size 参数
# innodb_use_sys_malloc = 1

# 这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,类似于Oracle的library cache。这不是一个强制参数,可以被突破。
innodb_additional_mem_pool_size = 16M

# 此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间,Redo log文件
innodb_log_file_size = 1024M

# 事务日志所使用的缓冲区。Innodb 在写事务日志时,为了提高写 Log 的 IO 性能,先将信息写入 Innodb Log Buffer 中,当满足 Innodb_flush_log_trx_commit 参数或日志缓冲区写满时,再将日志同步到磁盘中。
# 默认 8M ,一般设为 16~64M 即可,可以通过 show status like 'innodb_log%'; 查看状态
innodb_log_buffer_size = 64M
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3M
innodb_log_files_in_group = 3

# Innodb 事务日志刷新方式,
# 0 为每隔一秒 log thread 会将 log buffer 中的数据写入到文件,并通知文件系统进行文件同步 flush 操作,极端情况下会丢失一秒的数据
# 1 为每次事务结束都会触发 log thread 将 log buffer 中的数据写入文件并通知文件系统同步文件,数据最安全、不会丢失任何已经提交的数据
# 2 为每次事务结束后 log thread 会将数据写入事务日志
# 但只是调用了文件系统的文件写入操作,并没有同步到物理磁盘,因为文件系统都是有缓存机制的,各文件系统的缓存刷新机制不同
# 当设为 1 时是最为安全的,但性能也是最差的。
# 0 为每秒同步一次,性能相对高一些。
# 设为 2 性能是最好的,但故障后丢失数据也最多( OS 跟主机硬件、供电足够安全可以选择,或对数据少量丢失可以接受 )。
innodb
innodb_flush_log_at_trx_commit = 2

#InnoDB 有其内置的死锁检测机制,LOCK TABLES语句锁定设置,能导致未完成的事务回滚。
#如果使用其他事务引擎处理锁,就会导致内置检测失效,需要通过配置对应参数解决
#InnoDB事务在被回滚之前可以设置一个等待锁的超时秒数,默认为50s,
#表示事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败,回滚数据
#通过以下方式可以动态设置
#set innodb_lock_wait_timeout=100; ---------session
#set global innodb_lock_wait_timeout=100; ---------global
#注意global的修改对当前线程是不生效的,只有建立新的连接才生效。
innodb_lock_wait_timeout = 10

innodb_sync_spin_loops = 40
innodb_max_dirty_pages_pct = 90
innodb_support_xa = 1

# Innodb 线程并发数,0 为不限制,默认 0
# 服务器有几个CPU就设置为几,建议用默认设置,一般为8.
innodb_thread_concurrency = 0

innodb_thread_sleep_delay = 500

# 文件IO的线程数,一般为 4,但是在 Windows 下,可以设置得较大。
innodb_file_io_threads    = 4

innodb_concurrency_tickets = 1000
log_bin_trust_function_creators = 1
innodb_flush_method = O_DIRECT

# 0:关闭独享表空间,使用共享表空间
innodb_file_per_table

# Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 4
innodb_read_io_threads = 16
innodb_write_io_threads = 16

innodb_io_capacity = 2000
innodb_file_format = Barracuda
innodb_purge_threads=1
innodb_purge_batch_size = 32
innodb_old_blocks_pct=75
innodb_change_buffering=all

# 事务隔离级别,为了有效保证并发读取数据的正确性( 默认 Repeatables Read 即:可重复读 )
# Innodb 有四种隔离级别:Read Uncommitted( 未提交读 )、Read Committed( 已提交读 )、
# Repeatable Read( 可重复读 )、Serializable( 可序列化 )

transaction_isolation = READ-COMMITTED

####快速预热 Buffer_pool 缓冲池##########################
# 当机器正常重启后,热数据还保留在内存中,避免瞬间连接数爆满导致机器死机
# 关闭数据库时把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_at_shutdown = 1

# 采用手工方式把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_now = 1

# 启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup = 1

# 采用手工方式把热数据加载到内存。
innodb_buffer_pool_load_now = 1

[mysqldump]
quick
# 在使用mysqldump备份数据时,服务器发送和接受的最大包长度
#使用 mysqldump 工具备份数据库时,当某张表过大时备份会报错,需要增大该值( 增大到大于表大小的值 )
# 查看备份文件大小
max_allowed_packet = 128M

# MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size = 128M

# MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
myisam_max_sort_file_size = 10G

myisam_max_extra_sort_file_size = 10G

# 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.
# 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择.
myisam_repair_threads = 1

# 自动检查和修复没有适当关闭的 MyISAM 表
myisam_recover



[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 256k
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
open-files-limit = 28192