Mysql技术

【译文】Mysql优化经验:安装完 MySQL 后必须调整的 10 项配置

写在开始前…

即使是经验老道的人也会犯错,会引起很多麻烦。所以在盲目的运用这些推荐之前,请记住下面的内容:

  • 一次只改变一个设置!这是测试改变是否有益的唯一方法。

  • 大多数配置能在运行时使用SET GLOBAL改变。这是非常便捷的方法它能使你在出问题后快速撤销变更。但是,要永久生效你需要在配置文件里做出改动。

  • 一个变更即使重启了MySQL也没起作用?请确定你使用了正确的配置文件。请确定你把配置放在了正确的区域内(所有这篇文章提到的配置都属于 [mysqld])

  • 服务器在改动一个配置后启不来了:请确定你使用了正确的单位。例如,innodb_buffer_pool_size的单位是MB而max_connection是没有单位的。

  • 不要在一个配置文件里出现重复的配置项。如果你想追踪改动,请使用版本控制。

  • 不要用天真的计算方法,例如”现在我的服务器的内存是之前的2倍,所以我得把所有数值都改成之前的2倍“。

» 阅读全文

关键词: mysql优化经验

wordpress数据库优化之执行sql语句减少mysql数据量

清理数据库的残留无效数据,可以用以下的语句(语句来源于WP Clean Up插件源代码):


DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_posts WHERE post_status = 'draft';
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
DELETE FROM wp_comments WHERE comment_approved = '0';
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id=1 AND object_id NOT IN (SELECT id FROM wp_posts);
DELETE FROM wp_options WHERE option_name LIKE '_site_transient_browser_%' OR 
option_name LIKE '_site_transient_timeout_browser_%' OR option_name LIKE '_transient_feed_%' OR
 option_name LIKE '_transient_timeout_feed_%';

优化数据表,可以用以下的语句:

» 阅读全文

关键词: wordpress , sql语句 , mysql

Mysql DBA系统学习(3)mysql服务的启动和停止(启动报错解决)

mysql的启动有很多方法,我们将来一一讨论

一,mysqld

    mysqld是mysql的服务

    mysqld这种方式启动的时候会读取my.cnf文件中的[mysqld]和[server]组group

(每一个组都有[]来分割)

   一般的,我们通过这种方式手动的调用mysqld,如果不是出去调试的目的,我们一般都不这样做。

因为这种方式会使错误日志直接从终端输出,而不是记录在错误日志文件中,这样,如果mysql崩溃的话

我们也不知道原因。

 连接方法

» 阅读全文

关键词: mysql服务 , dba , mysql

Mysql DBA系统学习(4)mysql的多实例multi配置方法、启动停止

mysql的多实例配置安装

 一,什么情况下我们会考虑一台物理服务器上部署多个实例,大致有以下几种情况:

1,采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移;

2,为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法(NUMA处理器必须支持,不过现在大部分处理器都支持的!),把不同的数据库分配到不同的实例上提供数据服务;

3,一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署;

已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例;

4,传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库;

» 阅读全文

关键词: mysql多实例 , dba , mysql

MySQL分页中limit查询效率的优化

MySQL分页中直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。

1、offset比较小的时候


select * from student limit 10,10

多次运行,时间保持在0.0004-0.0005之间
Select * From student Where id >=(
Select id From student Order By id limit 10,1  ) limit 10

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006

» 阅读全文

关键词: limit优化 , mysql优化

mysql分表技术之利用MRG_MyISAM存储引擎分表法

Mysql在千万级数据的时候就会出现各种瓶颈,在没有足够多的硬件的情况下,对mysql进行分表不为是一种好方法,mysql分表技术其实有好几种方法,利用MRG_MyISAM存储引擎分表法就是其中一种。

首先,我们需要想好到底分多少个表,前提当然是满足应用。这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共 10个表,其取值也很好做,就是对10进行取模。另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了。

好了,先来创建表吧,代码如下:

» 阅读全文

关键词: mrg_myisam分表 , mysql分表

mysql中查询每个分组的前几名或者分组取最大N条记录的方法探讨

在使用SQL的过程中,我们经常遇到这样一类问题:如何找出每个程序最近的日志条目?如何找出每个用户的最高分?在每个分类中最受欢迎的商品是什么?通常这类“找出每个分组中最高分的条目”的问题可以使用相同的技术来解决

我们以如下例子来测试:

create table t2 (
    id int primary key,
    gid    char,
    col1    int,
    col2    int
) engine=myisam;

» 阅读全文

关键词: 分组取值 , 分组取最大

Mysql DBA系统学习(2)了解mysql的源码目录及源文件

了解mysql的源码目录

包括客户端代码,服务端代码,测试工具和其他库文件

mysql源码结构

Bdb 伯克利DB表引擎

BUILD 构建工程的脚本

Client 客户端

Cmd-line-utils 命令行工具

Config 构建工程所需的一些文件

Dbug Fred Fish的调试库

Docs 文档文件夹

Extra 一些相对独立的次要的工具

» 阅读全文

关键词: mysql源码 , dba , mysql