Mairadb数据安装及介绍
1、 为什么要选择使用mariadb呢?
在目前的数据库领域最常见的和广泛使用的是mysql、oracle、sqlserver,由于开源、免费的特点,mysql数据库是应用最广泛的开源的关系型数据库系统。但是在2009年oracle收购了sun公司,mysql产品开发陷入封闭状态,开源力量无法参与到mysql产品的开发,导致mysql更新缓慢,而同期,数据库领域在快速的发展,各种技术涌现,但是mysql与此无缘,在oracle收购sun公司以后,mysql引用了一些非开源的模块,这些模块为mysql后续的开源发展埋下阴影,一旦mysql不在开源和免费,使用mysql的产品的公司势必会陷入大量的成本负担,由于mysql开源的不确定性,各大厂商都开始使用mariadb来代替mysql,也由于mariadb是作为mysql的分支存在,所以mariadb对mysql有非常高的兼容性。同事mariadb官网为了更好的从mysql进行迁移,mariadb积极更新版本以保持和mysql的特性一致,用户可以轻易的把mysql迁移到mariadb上。
2、 mariadb的获取
官方网站
https://mariadb.com/
https://downloads.mariadb.org/
http://mirrors.ctyun.cn/MariaDB/
3、 mariadb-10.1.x二进制安装
、下载
wget http://mirrors.ctyun.cn/MariaDB/mariadb-10.1.10/bintar-linux-x86_64/mariadb-10.1.10-linux-x86_64.tar.gz
tar –xvf mariadb-10.1.10-linux-x86_64.tar.gz –C /opt
cp /opt/ mariadb-10.1.10-linux-x86_64 /usr/local/mysql
、添加用户
Useradd –r –s /sbin/nologin –M mysql
Chown –R mysql:mysql /opt/ mariadb-10.1.10-linux-x86_64
4、 配置
、拷贝mysql.server到/etc/init.d/mysql
cp/usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
、拷贝配置文件到/etc/my.cnf
cp /usr/local/mysql/support-files/my-default.cnf/etc/my.cnf
、设置权限
Chmod +x /etc/init.d/mysql
、修改my.cnf文件添加
[mysqld]
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data
port = 3306
server_id = 8
4.5、初始化mysql
Cd /usr/local/mysql/
Scripts/mysql_install_db –user=mysql
4.6、设置并加固mysql
/usr/local/mysql/bin/mysql_secure_installation
NOTE: RUNNINGALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
…………
Entercurrent password for root (enter for none): #若已设置root密码,则输入,否则留空
…………
You alreadyhave a root password set, so you can safely answer 'n'.
Changethe root password? [Y/n] y #是否改变root密码?(因为我已设置过)
New password:
Re-enter newpassword:
…………
Removeanonymous users? [Y/n] y #是否移除匿名用户?
…………
Disallowroot login remotely? [Y/n] y #是否禁止root远程登录?
…………
Removetest database and access to it? [Y/n] n #是否移除测试数据库?
…………
Reloadprivilege tables now? [Y/n] y #是否重新加载权限表?
…………
Cleaning up... #完成!
Service mysql start
自此完成安装
另:
配置文件内容:
default-character-set = utf8
port = 3306
socket = /tmp/mysql.sock
no-auto-rehash
#default-character-set = utf8
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/3306/data
open_files_limit = 10240
back_log = 600
max_connections = 1000 实际MySQL服务器允许的最大连接数16384;
max_connect_errors = 6000 可以允许多少个错误连接
table_cache = 1024 高速缓存的大小.table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G
内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql
对SQL响应的速度更快了,不可避免的会产生更多的死锁(deadlock),这样反而使得数据库整个一套操作慢了
下来,严重影响性能。
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 2M是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配
设置的内存.并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。
join_buffer_size = 2M
thread_cache_size = 64 重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程
将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个
线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能
根据物理内存设置规则如下:
1G --->8
2G --->16
3G --->32
>3G ---> 64
thread_concurrency = 16 对mysql的性能影响很大,在多个cpu(或多核)的情况下,错误设置了thread_concurrency的
值, 会导致mysql不能充分利用多cpu(或多核),出现同一时刻只能一个cpu(或核)在工作的情况。
应设为CPU核数的2倍. 比如有一个双核的CPU,那么thread_concurrency的应该为4; 2个双核的cpu,
thread_concurrency的值应为8.
query_cache_size = 32M缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存
中取到结果,而不需要再去解析和执行sql。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓
存值的相关条目被清空
query_cache_limit = 2M 单个查询能够使用的缓冲区大小.缺省为1M
query_cache_min_res_unit = 2k它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,
如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小
query_cache_min_res_unit
default-storage-engine = MyISAM
default_table_type = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED 设置所有连接的默认事务隔离级
tmp_table_size = 256M 临时HEAP数据表的最大长度
max_heap_table_size = 256M HEAP数据表(内存表)的最大长度(默认设置是16M);
long_query_time = 1
log_long_format
log-bin = /data0/mysql/3306/binlog
binlog_cache_size = 8M 为binary log指定在查询请求处理过程中SQL 查询语句使用的缓存大小
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 7
key_buffer_size = 256M 索引缓冲区的大小,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度
read_buffer_size = 1M 读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享.
read_rnd_buffer_size = 16M 针对按某种特定顺序(如ORDER BY子句)输出的查询结果(默认256K)加速排序操作后的
读数据,提高读分类行的速度。
bulk_insert_buffer_size = 64M 指定 MyISAM 类型数据表表使用特殊的树形结构的缓存
myisam_sort_buffer_size = 128M myisam引擎的sort_buffer_size
myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G 这个参数已经不在MySQL
myisam_repair_threads = 1
myisam_recover 自动检查和修复无法正确关闭MyISAM表
skip-name-resolve
master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
server-id = 1 设定为master
innodb_additional_mem_pool_size = 16MInnoDB用来存储数据字典和其他内部数据结构的内存池大小。
应用程序里的表越多就应该分配越多的内存,如果innodb用光了这个内存就会向系统内存要。
并且写入警告日志,根据MySQL手册,对于2G内存的机器,推荐值是20M。
缺省值是1M。通常不用太大,只要够用就行,与表结构的复杂度有关系。
innodb_status_file
InnoDB发送诊断输出到stderr或文件,而不是到stdout或者固定尺寸内存缓冲,以避免底层缓冲溢出。作为一个副
效果,SHOWINNODB STATUS的输出每15秒钟写到一个状态文件。这个文件的名字是innodb_status.pid,其中pid
是服务器进程ID。这个文件在MySQL数据目录里创建。正常关机之时,InnoDB删除这个文件。如果发生不正常
的关机,这些状态文件的实例可能被展示,而且必须被手动删除。在移除它们之前,你可能想要检查它们来看它
们是否包含有关不正常关机的原因的有用信息。仅在配置选项innodb_status_file=1被设置之时,innodb_status.pid
文件被创建。
innodb_buffer_pool_size = 2048M 指定大小的内存来缓冲数据和索引。
对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。
根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_file_io_threads = 4 IO操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_thread_concurrency = 16InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。
innodb_flush_log_at_trx_commit = 2 InnoDB记录日志的方式
如果设置为1,则每个事务提交的时候,MySQL都会将事务日志写入磁盘。
如果设置为0或者2,则大概每秒中将日志写入磁盘一次。
实际测试发现,该值对插入数据的速度影响非常大
设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。
建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。
在存在丢失最近部分事务的危险的前提下,可以把该值设为0。
innodb_log_buffer_size = 16M 日志缓存的大小
默认的设置在中等强度写入负载以及较短事务的情况下,一般可以满足服务器的性能要求。
如果更新操作峰值或者负载较大就应该加大这个值。8-16M即可。
innodb_log_file_size = 128M日志组中每个日志文件的大小在高写入负载尤其是大数据集的情况下很重要。
这个值越大性能就越高,但恢复时时间会加长。默认是5M。Javaeye推荐innodb_log_file_size =64M
innodb_log_files_in_group = 3 日志组中的日志文件数目,推荐使用3
innodb_max_dirty_pages_pct = 90 最大脏页的百分数
innodb_lock_wait_timeout = 120 事务获得资源超时设置,默认50s
innodb_file_per_table = 0 为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里__