首页 > 编程知识 正文

关于linux中对mysql优化的信息

时间:2023-12-24 12:05:18 阅读:320005 作者:EJEV

本文目录一览:

如何减轻MySQL数据库的工作压力

当使用MySQL数据库的网站访问量越来越大的时候,它的压力也会越来越大,那么如何给MySQL数据库减压呢?那就是优化! 单机MySQL的优化有三种方法。分别是:一、服务器物理硬件的优化;二、MySQL安装时的编译优化;三、自身配置文件my.cnf的优化。一、服务器物理硬件的优化1、磁盘寻道能力(磁盘I/O) 是制约MySQL性能的最大因素之一,建议使用RAID1+0磁盘阵列,另外最好不要尝试使用RAID-5,因为MySQL在RAID-5磁盘阵列上的效率实际上并不是很快;2、CPU也很重要,对于MySQL应用,推荐使用DELL R710,E5620 @2.40GHz(4 core)* 2或跟这个处理能力差不多的也行。 3、物理内存,物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。二、MySQL安装时的编译优化 建议采取编译安装的方法,这样性能上有较大提升,服务器系统建议用64bit的Centos5.5,源码包的编译参数会默认以Debgu模式生成二进制代码,而Debug模式给MySQL带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用“—without-debug”参数禁用Debug模式。 而如果把—with-mysqld-ldflags和—with-client-ldflags二个编译参数设置为—all-static的话,可以告诉编译器以静态方式编译和编译结果代码得到最高的性能。使用静态编译和使用动态编译的代码相比,性能差距可能会达到5%至10%之多。三、自身配置文件my.cnf的优化 当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对 MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明:#vim /etc/my.cnf以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。[mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sockskip-locking#避免MySQL的外部锁定,减少出错几率增强稳定性。skip-name-resolve#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!back_log = 384#back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自 己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。key_buffer_size = 384M#key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!max_allowed_packet = 4M thread_stack = 256K table_cache = 614K sort_buffer_size = 6M#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。read_buffer_size = 4M#读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。join_buffer_size = 8M#联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。myisam_sort_buffer_size = 64M table_cache = 512 thread_cache_size = 64 query_cache_size = 64M#指定MySQL查询缓冲区的大小。可以通过在MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够 的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。tmp_table_size = 256M max_connections = 768#指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。max_connect_errors = 1000 wait_timeout = 10#指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。thread_concurrency = 8#该参数取值为服务器逻辑CPU数量*2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4*2=8;这个目前也是双四核主流服务器配置。skip-networking#开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!table_cache=1024#物理内存越大,设置就越大.默认为2402,调到512-1024最佳innodb_additional_mem_pool_size=4M#默认为2Minnodb_flush_log_at_trx_commit=1#设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1innodb_log_buffer_size=2M#默认为1Minnodb_thread_concurrency=8#你的服务器CPU有几个就设置为几,建议用默认一般为8key_buffer_size=256M#默认为218,调到128最佳tmp_table_size=64M#默认为16M,调到64-256最挂read_buffer_size=4M#默认为64Kread_rnd_buffer_size=16M#默认为256Ksort_buffer_size=32M#默认为256Kthread_cache_size=120#默认为60query_cache_size=32M 另外很多情况需要具体情况具体分析1、如果Key_reads太大,则应该把my.cnf中Key_buffer_size变大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。2、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。 通过参数设置进行性能优化或多或少可以带来性能的提升,但效果不一定会很突出。

如何在linux中安装mysql

我这是centos系统,ubantu不适用!!!

我这是centos系统,ubantu不适用!!!

我这是centos系统,ubantu不适用!!!

点击右下角展开,否则没有自动换行!!!!

点击右下角展开,否则没有自动换行!!!!

点击右下角展开,否则没有自动换行!!!!

重要的事情说三遍

练习用的话直接yum -y install mysql mysql-server

也可以使用源码安装

先把rpm格式的mysql删除,否则初始化失败rpm -e mysql-server mysql --nodeps   //忽略依赖关系删除

yum -y install ncurses-devel  //安装依赖包

tar xf cmake-2.8.12.tar.gz -C /usr/src/  //mysql需要cmake支持

cd /usr/src/cmake-2.8.12/ //进入解压路径

./configure  gmake  gmake install   //安装cmake

groupadd mysql         //创建mysql组

useradd -M -s /sbin/nologin -g mysql mysql    //创建mysql用户,并加入mysql组里

tar xf mysql-5.7.2-m12.tar.gz -C /usr/src/     //解压mysqlcd /usr/src/mysql-5.7.2-m12/        //进入解压路径

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc  make  make install //安装选项

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql     //主程序安装目录

-DDEFAULT_CHARSET=utf8                         //默认字符集为 utf8

-DDEFAULT_COLLATION=utf8_general_ci         //默认的字符集校对规则

-DWITH_EXTRA_CHARSETS=all                     //安装所有字符集

-DSYSCONFDIR=/etc                             //配置文件存放目录

make  make install  //开始make

优化步骤

cp support-files/my-default.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

echo "PATH=$PATH:/usr/local/mysql/bin"  /etc/profile

. /etc/profile //注意“.”后面有空格

chown -R mysql:mysql /usr/local/mysql/

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql  //初始化

--basedir=/usr/local/mysql/         //指定安装目录(产品目录)

--datadir=/usr/local/mysql/data     //指定数据目录

--user=mysql                        //指定用户身份

service mysqld start

Starting MySQL..............                               [确定]

mysqladmin -u root password '123456'    //设置成自己的密码

我是5.7的版本有可能一定几率启动时报错,看下mysql的配置文件,里面的mysql.sock文件找不到,解决方法如下:

find / -name mysql.sock

找到后复制这个路径

vim /etc/my.cnf

找到sock=/data/sock这一行,把后面的路径改成刚才找到的路径然后重启mysql即可。

如果还报错就告诉我

linux下mysql问题

首先你要了解mysql 是命令行方式mysql 查询解释器。

真正的mysql 数据库服务器程序,其实是mysqld

所以光哟mysqld 是不行的,还需要一些参数,不然运行就会有问题。

如果你的 mysql 是系统自带的,那么一般会有一个 /etc/init.d/mysql 的服务。

你可以用服务管理器来设置,或者每次手动启动

如果你是自己装的,可能会没有这个东西,那就需要用命令启动,具体什么命令查看网上的资料吧。没参数印象里可以启动,但有安全问题。觉得还不懂就上网多搜搜资料吧!

网站访问量大 怎样优化mysql数据库

I 硬件配置优化

CPU选择:多核的CPU,主频高的CPU

内存:更大的内存

磁盘选择:更快的转速、RAID、阵列卡,

网络环境选择:尽量部署在局域网、SCI、光缆、千兆网、双网线提供冗余、0.0.0.0多端口绑定监听

II 操作系统级优化

使用64位的操作系统,更好的使用大内存。

设置noatime,nodiratime

[zhangxy@dowload_server1 ~]$ cat /etc/fstab

LABEL=/ / ext3 defaults,noatime,nodiratime 1 1

/dev/sda5 /data xfs defaults,noatime,nodiratime 1 2

优化内核参数

net.ipv4.tcp_keepalive_time=7200

net.ipv4.tcp_max_syn_backlog=1024

net.ipv4.tcp_syncookies=1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.neigh.default.gc_thresh3 = 2048

net.ipv4.neigh.default.gc_thresh2 = 1024

net.ipv4.neigh.default.gc_thresh1 = 256

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.forwarding = 1

net.ipv4.conf.default.proxy_arp = 0

net.ipv4.tcp_syncookies = 1

net.core.netdev_max_backlog = 2048

net.core.dev_weight = 64

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_rfc1337 = 1

net.ipv4.tcp_sack = 0

net.ipv4.tcp_fin_timeout = 20

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_max_orphans = 32768

net.core.optmem_max = 20480

net.core.rmem_default = 16777216

net.core.rmem_max = 16777216

net.core.wmem_default = 16777216

net.core.wmem_max = 16777216

net.core.somaxconn = 500

net.ipv4.tcp_orphan_retries = 1

net.ipv4.tcp_max_tw_buckets = 18000

net.ipv4.ip_forward = 0

net.ipv4.conf.default.proxy_arp = 0

net.ipv4.conf.all.rp_filter = 1

kernel.sysrq = 1

net.ipv4.conf.default.send_redirects = 1

net.ipv4.conf.all.send_redirects = 0

net.ipv4.ip_local_port_range = 5000 65000

kernel.shmmax = 167108864

vm.swappiness=0

加大文件描述符限制

Vim /etc/security/limits.conf

加上

* soft nofile 65535

* hard nofile 65535

文件系统选择 xfs

/dev/sda5 /data xfs defaults,noatime,nodiratime 1 2

III Mysql设计优化

III.1存储引擎的选择

Myisam:数据库并发不大,读多写少,而且都能很好的用到索引,sql语句比较简单的应用,TB数据仓库

Innodb:并发访问大,写操作比较多,有外键、事务等需求的应用,系统内存较大。

III.2命名规则

多数开发语言命名规则:比如MyAdress

多数开源思想命名规则:my_address

避免随便命名

III.3字段类型选择

字段类型的选择的一般原则:

根据需求选择合适的字段类型,在满足需求的情况下字段类型尽可能小。

只分配满足需求的最小字符数,不要太慷慨。

原因:更小的字段类型更小的字符数占用更少的内存,占用更少的磁盘空间,占用更少的磁盘IO,以及占用更少的带宽。

III.3.1 整型:

见如下图:

类型

字节

最小值

最大值

(带符号的/无符号的)

(带符号的/无符号的)

TINYINT

1

-128

127

255

SMALLINT

2

-32768

32767

65535

MEDIUMINT

3

-8388608

8388607

16777215

INT

4

-2147483648

2147483647

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

18446744073709551615

根据满足需求的最小整数为选择原则,能用INT的就不要用BIGINT。

用无符号INT存储IP,而非CHAR(15)。

III.3.2 浮点型:

类型

字节

精度类型

使用场景

FLOAT(M,D)

4

单精度

精度要求不高,数值比较小

DOUBLE(M,D)(REAL)

8

双精度

精度要求不高,数值比较大

DECIMAL(M,D)(NUMERIC)

M+2

自定义精度

精度要求很高的场景

III.3.3 时间类型

类型

取值范围

存储空间

零值表示法

DATE

1000-01-01~9999-12-31

3字节

0000-00-00

TIME

-838:59:59~838:59:59

3字节

00:00:00

DATETIME

1000-01-01 00:00:00~9999-12-31 23:59:59

8字节

0000-00-00 00:00:00

TIMESTAMP

19700101000000~2037年的某个时刻

4字节

00000000000000

YEAR

YEAR(4):1901~2155 YEAR(2):1970~2069

1字节

0000

III.3.4 字符类型

类型

最大长度

占用存储空间

CHAR[(M)]

M字节

M字节

VARCHAR[(M)]

M字节

M+1字节

TINYBLOD,TINYTEXT

2^8-1字节

L+1字节

BLOB,TEXT

2^16-1字节

L+2

MEDIUMBLOB,MEDIUMTEXT

2^24-1字节

L+3

LONGBLOB,LONGTEXT

2^32-1字节

L+4

ENUM('value1','value2',...)

65535个成员

1或2字节

SET('value1','value2',...)

64个成员

1,2,3,4或8字节

注:L表示可变长度的意思

对于varchar和char的选择要根据引擎和具体情况的不同来选择,主要依据如下原则:

1. 如果列数据项的大小一致或者相差不大,则使用char。

2. 如果列数据项的大小差异相当大,则使用varchar。

3. 对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间。

4. 对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空 间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。

5. 表中只要存在一个varchar类型的字段,那么所有的char字段都会自动变成varchar类型,因此建议定长和变长的数据分开。

III.4编码选择

单字节 latin1

多字节 utf8(汉字占3个字节,英文字母占用一个字节)

如果含有中文字符的话最好都统一采用utf8类型,避免乱码的情况发生。

III.5主键选择原则

注:这里说的主键设计主要是针对INNODB引擎

1. 能唯一的表示行。

2. 显式的定义一个数值类型自增字段的主键,这个字段可以仅用于做主键,不做其他用途。

3. MySQL主键应该是单列的,以便提高连接和筛选操作的效率。

4. 主键字段类型尽可能小,能用SMALLINT就不用INT,能用INT就不用BIGINT。

5. 尽量保证不对主键字段进行更新修改,防止主键字段发生变化,引发数据存储碎片,降低IO性能。

6. MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

7. MySQL主键应当有计算机自动生成。

8. 主键字段放在数据表的第一顺序。

推荐采用数值类型做主键并采用auto_increment属性让其自动增长。

III.6其他需要注意的地方

NULL OR NOT NULL

尽可能设置每个字段为NOT NULL,除非有特殊的需求,原因如下:

1. 使用含有NULL列做索引的话会占用更多的磁盘空间,因为索引NULL列需要而外的空间来保存。

2. 进行比较的时候,程序会更复杂。

3. 含有NULL的列比较特殊,SQL难优化,如果是一个组合索引,那么这个NULL 类型的字段会极大影响整个索引的效率。

索引

索引的缺点:极大地加速了查询,减少扫描和锁定的数据行数。

索引的缺点:占用磁盘空间,减慢了数据更新速度,增加了磁盘IO。

添加索引有如下原则:

1. 选择唯一性索引。

2. 为经常需要排序、分组和联合操作的字段建立索引。

3. 为常作为查询条件的字段建立索引。

4. 限制索引的数据,索引不是越多越好。

5. 尽量使用数据量少的索引,对于大字段可以考虑前缀索引。

6. 删除不再使用或者很少使用的索引。

7. 结合核心SQL优先考虑覆盖索引。

8. 忌用字符串做主键。

反范式设计

适当的使用冗余的反范式设计,以空间换时间有的时候会很高效。

IV Mysql软件优化

开启mysql复制,实现读写分离、负载均衡,将读的负载分摊到多个从服务器上,提高服务器的处理能力。

使用推荐的GA版本,提升性能

利用分区新功能进行大数据的数据拆分

V Mysql配置优化

注意:全局参数一经设置,随服务器启动预占用资源。

key_buffer_size参数

mysql索引缓冲,如果是采用myisam的话要重点设置这个参数,根据(key_reads/key_read_requests)判断

innodb_buffer_pool_size参数

INNODB 数据、索引、日志缓冲最重要的引擎参数,根据(hit riatos和FILE I/O)判断

wait_time_out参数

线程连接的超时时间,尽量不要设置很大,推荐10s

max_connections参数

服务器允许的最大连接数,尽量不要设置太大,因为设置太大的话容易导致内存溢出,需要通过如下公式来确定:

SET @k_bytes = 1024;

SET @m_bytes = @k_bytes * 1024;

SET @g_bytes = @m_bytes * 1024;

SELECT

(

@@key_buffer_size + @@query_cache_size + @@tmp_table_size+

@@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size+

@@innodb_log_buffer_size+

@@max_connections *

( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size+

@@join_buffer_size + @@binlog_cache_size + @@thread_stack

) )

/ @g_bytes AS MAX_MEMORY_USED_GB;

thread_concurrency参数

线程并发利用数量,(cpu+disk)*2,根据(os中显示的请求队列和tickets)判断

sort_buffer_size参数

获得更快的--ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCT

read_rnd_buffer_size参数

当根据键进行分类操作时获得更快的--ORDER BY

join_buffer_size参数

join连接使用全表扫描连接的缓冲大小,根据select_full_join判断

read_buffer_size参数

全表扫描时为查询预留的缓冲大小,根据select_scan判断

tmp_table_size参数

临时内存表的设置,如果超过设置就会转化成磁盘表,根据参数(created_tmp_disk_tables)判断

innodb_log_file_size参数(默认5M)

记录INNODB引擎的redo log文件,设置较大的值意味着较长的恢复时间。

Ø innodb_flush_method参数(默认fdatasync)

Linux系统可以使用O_DIRECT处理数据文件,避免OS级别的cache,O_DIRECT模式提高数据文件和日志文件的IO提交性能

innodb_flush_log_at_trx_commit(默认1)

表示每秒进行一次log写入cache,并flush log到磁盘。

表示在每次事务提交后执行log写入cache,并flush log到磁盘。

表示在每次事务提交后,执行log数据写入到cache,每秒执行一次flush log到磁盘。

VI Mysql语句级优化

1. 性能查的读语句,在innodb中统计行数,建议另外弄一张统计表,采用myisam,定期做统计.一般的对统计的数据不会要求太精准的情况下适用。

2. 尽量不要在数据库中做运算。

3. 避免负向查询和%前缀模糊查询。

4. 不在索引列做运算或者使用函数。

5. 不要在生产环境程序中使用select * from 的形式查询数据。只查询需要使用的列。

6. 查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。

7. where子句尽可能对查询列使用函数,因为对查询列使用函数用不到索引。

8. 避免隐式类型转换,例如字符型一定要用’’,数字型一定不要使用’’。

9. 所有的SQL关键词用大写,养成良好的习惯,避免SQL语句重复编译造成系统资源的浪费。

10. 联表查询的时候,记得把小结果集放在前面,遵循小结果集驱动大结果集的原则。

11. 开启慢查询,定期用explain优化慢查询中的SQL语句。

LINUX下的MYSQL问题

1. 你应该首先明确你对Mysql的要求如何,默认安装下的版本都比较低,你是否需要高版本的众多特性,比如升级版本的MySQL接口等。如果你确定对速度和通用性没有太多要求,就可以省去这一步骤。

2. 在问这样的问题之前,最好公布以下Linux的发布版本,著名的发布版本大约有350种,这样无头的问题让人无法下手。但是可以告诉你,MySQL的所有设置都可以在MySQL管理器里完成,最简单的管理器就是命令行。

如果你需要更可视化管理界面,需要从官方下载工具.而且要注意版本的匹配。

如果直接加载客户,可以在mysql命令行下面

mysql grant select, insert, update

on db_name.table_name

to user@domain

set password="123456"

在做更改的时候要有足够的把握,否则出错就麻烦了。怎么做到心中有数?去看官方文档吧。

3. 命令行下面。

# passwd username

关于红帽子linuxAS5中mysql加固

,1,在linux下的mysql服务器进行所有访问的审计这个百度上已经有人详细介绍过次方法了,具体可以查看

2,对mysqld的启动项进行加固

–local-infile[={0|1}]

如果用–local-infile=0启动服务器,则客户端不能使用LOCAL in LOAD DATA语句。

–old-passwords

强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时,为了保证兼容性这很有用。

(OBSOLETE) –safe-show-database

在以前版本的MySQL中,该选项使SHOW DATABASES语句只显示用户具有部分权限的数据库名。在MySQL 5.1中,该选项不再作为现在的 默认行为使用,有一个SHOW DATABASES权限可以用来控制每个账户对数据库名的访问。

–safe-user-create

如果启用,用户不能用GRANT语句创建新用户,除非用户有mysql.user表的INSERT权限。如果你想让用户具有授权权限来创建新用户,你应给用户授予下面的权限:

mysql GRANT INSERT(user) ON mysql.user TO ‘user_name’@'host_name’;

这样确保用户不能直接更改权限列,必须使用GRANT语句给其它用户授予该权限。

–secure-auth

不允许鉴定有旧(pre-4.1)密码的账户。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。