查询当前系统版本是否为centos7 mysql
cat /etc/redhat-release
CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL受权许可。开发这个分支的缘由之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以社区采用分支的方式来避开这个风险。MariaDB的目的是彻底兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 sql
yum install mariadb-server mariadb
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #中止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动 shell
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpmrpm -ivh mysql-community-release-el7-5.noarch.rpmyum install mysql-community-server
安装完成后重启mysql服务 数据库
service mysqld restart
初次安装mysql,root帐户没有密码 设置密码: windows
set password for 'root'@'localhost' =password('password');
mysql5.7 须要在配置中 my.ini/my.cnf里面配置时区 不然就须要在url里面加参数了centos
default-time-zone = '+8:00'
使用jdbc链接数据库,批量插入时候preparedstatement 的addBatch 默认是不起做用的,须要在url后面加上参数 缓存
rewriteBatchedStatements=true安全
这样批量插入才起做用服务器
mysql配置文件为/etc/my.cnf
最后加上编码配置 网络
[mysql]default-character-set =utf8
把在全部数据库的全部表的全部权限赋值给位于全部IP地址的root用户。
grant all privileges on *.* to root@'%'identified by 'password';
可是,通常来説为了安全,咱们会把username@后面跟上一个具体的ip
若是是新用户而不是root,则要先新建用户
create user 'username'@'%' identified by 'password';
适用于通常开发、测试迅速搭建mysql环境。
[mysqld] #myslqd服务运行时的端口号 port=3306 #socket文件是在Linux环境下特有的,用户的客户端软件链接能够不经过TCP/IP网络而直接使用unix socket链接到Mysql。 socket=/tmp/mysql.sock #避免Mysql的外部锁定,减小出错概率,加强稳定性。 skip-external-locking #禁止MySql对外部链接进行DNS解析,使用这一选项能够消除MySQL进行NDS解析的时间。但须要注意的是:若是开启该选项,则全部远程主机连 接受权都要使用IP地址方式了,不然MYSQL将没法正常处理链接请求。 skip-name-resolve #back_log参数的值指出在MySQL暂时中止响应新请求以前,短期内的多少个请求能够被存在对堆栈中,若是系统短期内有不少链接,则需>要增大该参数的值,该参数值指定到来的TCP/IP链接的监听队列的大小。不一样的操做系统在这个队列的大小有本身的限制,若是试图将back_log设定得高于操做系统的限制将是无效的,其默认值为50,对于LINUX系统而言,推荐设置为小于512的整数。 back_log=384 #索引缓冲区大小,增长它可获得更好的索引处理性能,对于内存在4GB左右的服务器,该参数可设置为256M或384M。若是该参数值设置的过大>反而会使服务器的总体效率下降。 key_buffer_size=384M #设定在网络传输中一次消息传输量的最大值,系统默认值为1MB,最大值是1GB,必须设定为1024的倍数,单位为字节。 max_allowed_packet=4M #设置MySQL每一个线程的堆栈大小,默认值足够大,可知足普通操做。可设置范围为128KB至4GB,默认192K。 thread_stack=256k #设定查询排序时所能使用的缓冲区大小,系统默认大小为2MB,从5.1.23版本开始,在除了WINDOWS 以外的64位平台上能够4GB的限制。该参数 对应的分配内在是每一个链接独占的,若是有100个链接,那么实际分配的总排序缓冲区大小为100*6=600MB,那么对于内存4GB左右的服务器来>说,推荐将其设置为6MB-8MB。 sort_buffer_size=6M #读查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内在也是每一个链接独享。 read_buffer_size=4M #设置Thread Cache池中能够缓存的链接池线程最大数量,可设置为0-16384,默认为0。1GB内存咱们配置为8,2GB内存咱们配置为16,4GB或4GB以上内在咱们配置为64。 thread_cache_size=64 #指定Mysql查询缓冲区的大小,能够经过在Mysql控制台观察,若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况,若是 Qcache_hits的值很是大,则代表查询缓冲使用的很是频繁 query_cache_size=64M #设置内在临时表最大值,若是超过该值,则会将临时表写入磁盘,其范围为1KB至4GB。 tmp_table_size=256M #指定MYSQL容许的最大链接进程数,若是在访问程序时常常出现TOO MANY CONNECTIONS的错误提示,则须要增大该参数值。 max_connections=5000 #指定一个请求的最大链接时间,对于4GB左右内在的服务器来讲,能够将其设置为5-10 wait_timeout=120 #该参数取值为服务器逻辑CPU数量*2,好比,服务器有两个物理CPU,每一个物理CPU支持HT超线程,因此实际取值4*2=8,这也是目前双四核主流 服务器的配置。 thread_concurrency=8 #开启该选项能够完全关闭MYSQL的TCP/IP链接方式,若是WEB服务器是以远程链接的方式访问MYSQL的数据库服务器,则不要开启该选项,不然>将没法正常链接。 skip-networking innodb_flush_log_at_trx_commit #抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都须要把日志写入(flush) 硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于不少运用,特别是从MyISAM表转过来的是能够的>,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,因此你通常不会丢失超过1-2秒的更新。设成0会更快一点,但安>全方面比较差,即便MySQL挂了也可能会丢失事务的数据。而值2只会在整个操做系统 挂了时才可能丢数据。 innodb_flush_log_at_trx_commit=2 #这是 InnoDB 存储引擎的事务日志所使用的缓冲区。相似于 Binlog Buffer,InnoDB 在写事务日志的时候,为了提升性能,也是先将信息写>入 Innofb Log Buffer 中,当知足 innodb_flush_log_trx_commit 参数所设置的相应条件(或者日志缓冲区写满)以后,才会将日志写到文>件(或者同步到磁盘)中。能够经过 innodb_log_buffer_size 参数设置其可使用的最大内存空间。 innodb_log_buffer_size=2M #这个数字要根据实际的状况来设定,但对于大多数的状况,是一个比较合适的设置 innodb_thread_concurrency=8 #tmp_table_size 的默认大小是 32M。若是一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,若是你作不少 高级 GROUP BY 查询,增长 tmp_table_size 值。 tmp_table_size=64M #随机读取数据缓冲区使用内存(read_rnd_buffer_size):和顺序读取相对应,当 MySQL 进行非顺序读取(随机读取)数据块的时候,会利用>这个缓冲区暂存读取的数据。如根据索引信息读取表数据,根据排序后的结果集与表进行Join等等。总的来讲,就是当数据块的读取须要知足>必定的顺序的状况下,MySQL 就须要产生随机读取,进而使用到 read_rnd_buffer_size 参数所设置的内存缓冲区。 read_rnd_buffer_size=16M #你最好在定义数据库命名规则的时候就所有采用小写字母加下划线的组合,而不使用任何的大写字母。 lower_case_table_names=1 #设置校验模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #默认配置没开查询缓存哦亲 explicit_defaults_for_timestamp
适用于通常DBA和架构师级别。
[client]port = 3306 # 客户端端口号为3306socket = /data/3306/mysql.sockdefault-character-set = utf8 # 客户端字符集,(控制character_set_client、character_set_connection、character_set_results)[mysql]no-auto-rehash # 仅仅容许使用键值的updates和deletes[mysqld] # 组包括了mysqld服务启动的参数,它涉及的方面不少,其中有MySQL的目录和文件,通讯、网络、信息安全,内存管理、优化、查询缓存区,还有MySQL日志设置等。user = mysql# mysql_safe脚本使用MySQL运行用户(编译时--user=mysql指定),推荐使用mysql用户。port = 3306# MySQL服务运行时的端口号。建议更改默认端口,默认容易遭受攻击。socket = /data/3306/mysql.sock # socket文件是在Linux/Unix环境下特有的,用户在Linux/Unix环境下客户端链接能够不经过TCP/IP网络而直接使用unix socket链接MySQL。basedir = /application/mysql # mysql程序所存放路径,经常使用于存放mysql启动、配置文件、日志等datadir = /data/3306/data # MySQL数据存放文件(极其重要)character-set-server = utf8 # 数据库和数据库表的默认字符集。(推荐utf8,以避免致使乱码)log-error=/data/3306/mysql.err# mysql错误日志存放路径及名称(启动出现错误必定要看错误日志,百分之百都能经过错误日志排插解决。)pid-file=/data/3306/mysql.pid # MySQL_pid文件记录的是当前mysqld进程的pid,pid亦即ProcessID。skip-locking# 避免MySQL的外部锁定,减小出错概率,加强稳定性。skip-name-resolv# 禁止MySQL对外部链接进行DNS解析,使用这一选项能够消除MySQL进行DNS解析的时候。可是须要注意的是,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式了,不然MySQL将没法正常处理链接请求!skip-networking # 开启该选项能够完全关闭MySQL的TCP/IP链接方式,若是Web服务器是以远程链接的方式访问MySQL数据库服务器的,则不要开启该选项,不然没法正常链接!open_files_limit = 1024# MySQLd能打开文件的最大个数,若是出现too mant open files之类的就须要调整该值了。back_log = 384 # back_log参数是值指出在MySQL暂时中止响应新请求以前,短期内的多少个请求能够被存在堆栈中。若是系统在短期内有不少链接,则须要增长该参数的值,该参数值指定到来的TCP/IP链接的监听队列的大小。不一样的操做系统在这个队列的大小上有本身的限制。若是试图将back_log设置得高于操做系统的限制将是无效的,其默认值为于Linux系统而言,推荐设置为小于512的整数。max_connections = 800# 指定MySQL容许的最大链接进程数。若是在访问博客时常常出现 Too Many Connections的错误提示,则须要增大该参数值。max_connect_errors = 6000 # 设置每一个主机的链接请求异常中断的最大次数,当超过该次数,MySQL服务器将禁止host的链接请求,直到MySQL服务器重启或经过flush hosts命令清空此host的相关信息。wait_timeout = 120 # 指定一个请求的最大链接时间,对于4GB左右内存的服务器来讲,能够将其设置为5~10。table_cache = 614K # table_cache指示表高速缓冲区的大小。当MySQL访问一个表时,若是在MySQL缓冲区还有空间,那么这个表就被打开并放入表缓冲区,这样作的好处是能够更快速地访问表中的内容。通常来讲,能够查看数据库运行峰值时间的状态值Open_tables和Open_tables,用以判断是否须要增长table_cache的值,即若是Open_tables接近table_cache的时候,而且Opened_tables这个值在逐步增长,那就要考虑增长这个值的大小了。external-locking = FALSE # MySQL选项能够避免外部锁定。True为开启。max_allowed_packet =16M # 服务器一次能处理最大的查询包的值,也是服务器程序可以处理的最大查询sort_buffer_size = 1M # 设置查询排序时所能使用的缓冲区大小,系统默认大小为2MB。# 注意:该参数对应的分配内存是每一个链接独占的,若是有100个链接,那么实际分配的总排序缓冲区大小为100 x6=600MB。因此,对于内存在4GB左右的服务器来讲,推荐将其设置为6MB~8MBjoin_buffer_size = 8M# 联合查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内存也是每一个链接独享。thread_cache_size = 64# 设置Thread Cache池中能够缓存的链接线程最大数量,可设置为0~16384,默认为个值表示能够从新利用保存在缓存中线程的数量,当断开链接时若是缓存中还有空间,那么客户端的线程将被放到缓存中;若是线程从新被请求,那么请求将从缓存中读取,若是缓存中是空的或者是新的请求,那么这个线程将被从新建立,若是有不少线程,增长这个值能够改善系统性能。经过比较Connections和Threads_created状态的变量,能够看到这个变量的做用。咱们能够根据物理内存设置规则以下:1GB内存咱们配置为8,2GB内存咱们配置为16,3GB咱们配置为32,4GB或4GB以上咱们给此值为64或更大的值。thread_concurrency = 8 # 该参数取值为服务器逻辑CPU数量x 2,在本例中,服务器有两个物理CPU,而每一个物理CPU又支持H.T超线程,因此实际取值为4 x 2 = 8。这也是双四核主流服务器的配置。query_cache_size = 64M# 指定MySQL查询缓冲区的大小。能够经过在MySQL控制台观察,若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况;若是Qcache_hits的值很是大,则代表查询缓冲使用得很是频繁。另外若是改值较小反而会影响效率,那么能够考虑不用查询缓冲。对于Qcache_free_blocks,若是该值很是大,则代表缓冲区中碎片不少。query_cache_limit = 2M # 只有小于此设置值的结果才会被缓存query_cache_min_res_unit = 2k # 设置查询缓存分配内存的最小单位,要适当第设置此参数,能够作到为减小内存快的申请和分配次数,可是设置过大可能致使内存碎片数值上升。默认值为4K,建议设置为1K~16K。default_table_type = InnoDB # 默认表的类型为InnoDBthread_stack = 256K # 设置MySQL每一个线程的堆栈大小,默认值足够大,可知足普通操做。可设置范围为128KB至4GB,默认为192KB#transaction_isolation = Level# 数据库隔离级别 (READ UNCOMMITTED(读取未提交内容) READ COMMITTED(读取提交内容) REPEATABLEREAD(可重读) SERIALIZABLE(可串行化))tmp_table_size = 64M # 设置内存临时表最大值。若是超过该值,则会将临时表写入磁盘,其范围1KB到4GB。max_heap_table_size = 64M # 独立的内存表所容许的最大容量。table_cache = 614# 给常常访问的表分配的内存,物理内存越大,设置就越大。调大这个值,通常状况下能够下降磁盘IO,但相应的会占用更多的内存,这里设置为614。table_open_cache = 512 # 设置表高速缓存的数目。每一个链接进来,都会至少打开一个表缓存。所以, table_cache 的大小应与 max_connections 的设置有关。例如,对于 200 个并行运行的链接,应该让表的缓存至少有 200 × N ,这里 N 是应用能够执行的查询的一个联接中表的最大数量。此外,还须要为临时表和文件保留一些额外的文件描述符。long_query_time = 1 # 慢查询的执行用时上限,默认设置是10s,推荐(1s~2s)log_long_format # 没有使用索引的查询也会被记录。(推荐,根据业务来调整)log-slow-queries = /data/3306/slow.log # 慢查询日志文件路径(若是开启慢查询,建议打开此日志)log-bin = /data/3306/mysql-bin # logbin数据库的操做日志,例如update、delete、create等都会存储到binlog日志,经过logbin能够实现增量恢复relay-log = /data/3306/relay-bin# relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,而后SQL线程会读取relay-log日志的内容并应用到从服务器relay-log-info-file = /data/3306/relay-log.info # 从服务器用于记录中继日志相关信息的文件,默认名为数据目录中的relay-log.info。binlog_cache_size = 4M # 在一个事务中binlog为了记录sql状态所持有的cache大小,若是你常用大的,多声明的事务,能够增长此值来获取更大的性能,全部从事务来的状态都被缓冲在binlog缓冲中,而后再提交后一次性写入到binlog中,若是事务比此值大,会使用磁盘上的临时文件来替代,此缓冲在每一个连接的事务第一次更新状态时被建立。max_binlog_cache_size = 8M # 最大的二进制Cache日志缓冲尺寸。max_binlog_size = 1G # 二进制日志文件的最大长度(默认设置1GB)一个二进制文件信息超过了这个最大长度以前,MySQL服务器会自动提供一个新的二进制日志文件接续上。expire_logs_days = 7 # 超过7天的binlog,mysql程序自动删除(若是数据重要,建议不要开启该选项)key_buffer_size = 256M # 指定用于索引的缓冲区大小,增长它可获得更好的索引处理性能。对于内存在4GB左右的服务器来讲,该参数可设置为256MB或384MB。# 注意:若是该参数值设置得过大反而会使服务器的总体效率下降!read_buffer_size = 4M # 读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每一个链接独享。read_rnd_buffer_size = 16M# 设置进行随机读的时候所使用的缓冲区。此参数和read_buffer_size所设置的Buffer相反,一个是顺序读的时候使用,一个是随机读的时候使用。可是二者都是针对与线程的设置,每一个线程均可以产生两种Buffer中的任何一个。默认值256KB,最大值4GB。bulk_insert_buffer_size = 8M # 若是常常性的须要使用批量插入的特殊语句来插入数据,能够适当调整参数至16MB~32MB,建议8MB。myisam_sort_buffer_size = 8M# 设置在REPAIR Table或用Create index建立索引或 Alter table的过程当中排序索引所分配的缓冲区大小,可设置范围4Bytes至4GB,默认为8MBlower_case_table_names = 1 # 实现MySQL不区分大小。(发开需求-建议开启)slave-skip-errors = 1032,1062 # 从库能够跳过的错误数字值(mysql错误以数字代码反馈,全的mysql错误代码大全,之后会发布至博客)。replicate-ignore-db=mysql # 在作主从的状况下,设置不须要同步的库。server-id = 1 # 表示本机的序列号为1,若是作主从,或者多实例,serverid必定不能相同。myisam_sort_buffer_size = 128M# 当须要对于执行REPAIR, OPTIMIZE, ALTER 语句重建索引时,MySQL会分配这个缓存,以及LOAD DATA INFILE会加载到一个新表,它会根据最大的配置认真的分配的每一个线程。myisam_max_sort_file_size = 10G# 当从新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)时,MySQL被容许使用临时文件的最大值。myisam_repair_threads = 1# 若是一个表拥有超过一个索引, MyISAM 能够经过并行排序使用超过一个线程去修复他们.myisam_recover# 自动检查和修复没有适当关闭的 MyISAM 表.innodb_additional_mem_pool_size = 4M # 用来设置InnoDB存储的数据目录信息和其余内部数据结构的内存池大小。应用程序里的表越多,你须要在这里面分配越多的内存。对于一个相对稳定的应用,这个参数的大小也是相对稳定的,也没有必要预留很是大的值。若是InnoDB用广了这个池内的内存,InnoDB开始从操做系统分配内存,而且往MySQL错误日志写警告信息。默认为1MB,当发现错误日志中已经有相关的警告信息时,就应该适当的增长该参数的大小。innodb_buffer_pool_size = 64M # InnoDB使用一个缓冲池来保存索引和原始数据,设置越大,在存取表里面数据时所须要的磁盘I/O越少。强烈建议不要武断地将InnoDB的Buffer Pool值配置为物理内存的50%~80%,应根据具体环境而定。innodb_data_file_path = ibdata1:128M:autoextend # 设置配置一个可扩展大小的尺寸为128MB的单独文件,名为ibdata有给出文件的位置,因此默认的是在MySQL的数据目录内。innodb_file_io_threads = 4 # InnoDB中的文件I/O线程。一般设置为4,若是是windows能够设置更大的值以提升磁盘I/Oinnodb_thread_concurrency = 8 # 你的服务器有几个CPU就设置为几,建议用默认设置,通常设为8。innodb_flush_log_at_trx_commit = 1 # 设置为0就等于innodb_log_buffer_size队列满后在统一存储,默认为1,也是最安全的设置。innodb_log_buffer_size = 2M # 默认为1MB,一般设置为8~16MB就足够了。innodb_log_file_size = 32M # 肯定日志文件的大小,更大的设置能够提升性能,但也会增长恢复数据库的时间。innodb_log_files_in_group = 3 # 为提升性能,MySQL能够以循环方式将日志文件写到多个文件。推荐设置为3。innodb_max_dirty_pages_pct = 90 # InnoDB主线程刷新缓存池中的数据。innodb_lock_wait_timeout = 120 # InnoDB事务被回滚以前能够等待一个锁定的超时秒数。InnoDB在它本身的锁定表中自动检测事务死锁而且回滚事务。InnoDB用locak tables 语句注意到锁定设置。默认值是50秒。innodb_file_per_table = 0 # InnoDB为独立表空间模式,每一个数据库的每一个表都会生成一个数据空间。0关闭,1开启。# 独立表空间优势:# 一、每一个表都有本身独立的表空间。# 2 、每一个表的数据和索引都会存在本身的表空间中。# 三、能够实现单表在不一样的数据库中移动。# 四、空间能够回收(除drop table操做处,表空不能本身回收。)[mysqldump]quick#quick 不缓冲查询,直接导出至stdoutmax_allowed_packet = 2M # 设定在网络传输中一次消息传输量的最大值。系统默认值为1MB,最大值是1GB,必须设置为1024的倍数。单位为字节。
MySQL最重要的两种存储引擎InnoDB与Myisam,这是基础,必定要知道
物理结构不一样
MyISAM :每一个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义.
数据文件的扩展名为.MYD (MYData)。
索引文件的扩展名是.MYI (MYIndex)
InnoDB:基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操做系统文件的大小,通常为 2GB
anto_increment 机制不一样
一张表,里面有ID自增主键,当insert了17条记录以后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18仍是15 。
答案:
若是表的类型是MyISAM,那么是18。
由于MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。
若是表的类型是InnoDB,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,因此重启数据库或者是对表进行OPTIMIZE操做,都会致使最大ID丢失。
查看是否已经启用profile,默认是关闭的
select @@profiling;
启用profiling(变量profiling是用户变量每次都得从新启用)
set profiling = 1;
使用profiling记录用户执行的SQL 查询分析的语句
show profiles;
里面有以前执行过的语句。根据id来具体查看io,cpu使用状况
show profile block io, cpu for query 1;