概述
11. MySQL引擎MyISAM与InnoDB讲解 吧
1) MyISAM引擎: <
默认表类型,它是基于传统的ISAM类型, ISAM是IndexedSequential Access Method (有 索引的顺序访问方法)的缩写, 它是存储记录和文件的标准方法不是事务安全的,而且不支持外键,如B. 果执行大量的select, insert MxISAM 比较适合。
I2) InnoDB 引擎:
支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。
Innodb最初是由innobase Oy公司开发,2005年10月由oracle公 三司并购,目前innodb采用双授权,一个是GPL授权,一个是商业授权。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。
3)总体来讲:
InnoDB和MyISAM是在使用MyfQL最常用的两个表类型,各有优正在观看
缺点,视具体应用而定。基本的差别为: MyISAM 类型不支持事务处
理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能, 三其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
①MyISAM适合: (1) 做很多count的计算; (2)插入不频繁, 查询非常频繁; (3)没有事务。
show engines;查看引擎
show variables like '%storage_engine%'
show create tables t;查看表使用的引擎
修改默认引擎
修改配置文件
default_storage_engine = InnoDB
alter table name engine=InnoDB;
如果添加引擎报错,删除数据目录ib_logfile0,ib_logfile1文件即可
[mysql]
port = 13007
socket = /tmp/sgrdb.sock
default_character_set = UTF8
no_auto_rehash
[mysqld]
############# GENERAL #############
user = sgrdb
port = 13007
default_storage_engine = InnoDB
bind_address = 0.0.0.0
character_set_server = UTF8
performance_schema = 1
connect_timeout = 8
local_infile = 1
lower_case_table_names = 1
join_buffer_size = 8M
sort_buffer_size = 8M
interactive_timeout = 31536000
wait_timeout = 31536000
safe_user_create = 1
binlog-ignore-db=dbscale_tmp
log_bin_trust_function_creators
group_concat_max_len = 200000
autocommit=1
transaction-isolation=READ-COMMITTED
############# Dir ##############
log_slave_updates=1
slow_query_log=/data/mysqldata/sgrdb/data13007
basedir = /app/dbcluster/sgrdb/smartsql3.0
datadir = /data/mysqldata/sgrdb/data13007
tmpdir = /data/mysqldata/tmp
slave_load_tmpdir = /data/mysqldata/sgrdb/tmp
innodb_data_home_dir = /data/mysqldata/sgrdb/data13007
innodb_log_group_home_dir = /data/mysqldata/sgrdb/data13007/log
log_bin = /data/mysqldata/sgrdb/data13007/log/smartsql-bin
relay_log = /data/mysqldata/sgrdb/data13007/log/relay-log
log_error = /data/mysqldata/sgrdb/data13007/log/error.log
slow_query_log_file = /data/mysqldata/sgrdb/data13007/log/slow.log
general_log_file = /data/mysqldata/sgrdb/data13007/log/general.log
############# MyISAM #############
delayed_insert_timeout = 300
key_buffer_size = 32M
myisam_recover = FORCE,BACKUP
myisam_sort_buffer_size = 64M
############# SAFETY #############
#live_max_allowed = 1024M
max_allowed_packet = 1024M
max_connect_errors = 1000000
skip_name_resolve
#sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE
innodb = FORCE
innodb_strict_mode = 1
sql_mode=''
############# BINARY LOGGING #############
expire_logs_days = 10
sync_binlog = 1
binlog_format = row
############# REPLICATION #############
#read_only = 1
skip_slave_start = 1
max_binlog_size = 200M
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
server_id = 1
relay_log_index = /data/mysqldata/sgrdb/data13007/log/relay-log.index
log_bin_index =/data/mysqldata/sgrdb/data13007/log/smartsql-bin.index
slave_skip_errors=1032,1062
############# CACHES AND LIMITS #############
tmp_table_size = 1G
max_heap_table_size = 1G
query_cache_type = 0
query_cache_size = 0
max_connections = 1000
max_user_connections = 0
thread_cache_size = 60
open_files_limit = 65535
table_definition_cache = 1024
table_open_cache = 10000
slave_net_timeout = 60
thread_stack = 512K
############# INNODB #############
innodb_adaptive_flushing = 1
innodb_buffer_pool_instances = 4
innodb_data_file_path = ibdata1:64M;ibdata2:16M:autoextend
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 4
innodb_log_file_size = 1500M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_buffer_pool_size = 12G
innodb_file_format = Barracuda
innodb_file_io_threads = 4
innodb_lock_wait_timeout = 5
innodb_log_buffer_size = 4M
innodb_old_blocks_time = 1000
innodb_open_files = 60000
innodb_print_all_deadlocks = 1
innodb_purge_threads = 1
innodb_read_ahead_threshold = 0
innodb_read_io_threads = 8
innodb_rollback_on_timeout = 0
innodb_spin_wait_delay = 6
innodb_stats_on_metadata = 0
innodb_thread_concurrency = 256
innodb_use_native_aio = 0
innodb_write_io_threads = 8
innodb_support_xa = 1
############# LOGGING #############
#log_queries_not_using_indexes = 1
slow_query_log = 1
#general_log = 0
#log_slow_admin_statements = 1
#long_query_time = 8
[mysqld_safe]
datadir = /data/mysqldata/sgrdb/data13007
MySQL数据库主从复制原理
Mysgl主从同步其实是-一个 异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,整个过程需要开启3个线程,分别是Master开启I0线程,slave开启I0线程和SQL线程。
a)在从服务器执行slave start,从服务器上IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送 bin-log日志内容。
b) Master 服务器接收到来自slave 服务器的I0线程的请求后, master服务器上的I0线程根据slave服务器发送的指定bin-log
日志之后的内容,然后返回给slave端的I0线程。(返回的信息中除了bin-log日志内容外,还有本次返回日志内容后在master服务器端的新的binlog文件名以及在binlog中的下一个指定更新位置。)
c) Slave的IO线程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的最末端,并将读取到的Master端 的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”;
d) Slave的Sgl线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行 的内容,并在自身执行。
最后
以上就是疯狂雨为你收集整理的mysql的全部内容,希望文章能够帮你解决mysql所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复