MySQL技术内幕:InnoDB存储-3.6 InnoDB存储引擎文件

3.6   InnoDB存储引擎文件
之前介绍的文件都是MySQL数据库本身的文件,和存储引擎无关。除了这些文件外,每个表存储引擎还有其自己独有的文件。这一节将具体介绍和InnoDB存储引擎密切相关的文件,这些文件包括重做日志文件、表空间文件。
3.6.1   表空间文件
InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放。默认配置下,会有一个初始化大小为10MB、名为ibdata1的文件。该文件就是默认的表空间文件(tablespace file)。你可以通过参数innodb_data_file_path对其进行设置。格式如下:
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
你也可以用多个文件组成一个表空间,同时制定文件的属性,如: Continue reading

CentOS5.5关闭sendmail服务【开机此处太慢】

sendmail服务在系统启用的时候特别的慢,平时用的也不多的,所以为了安全直接将此服务关闭.并加速机器启用速度.

1,关闭sendmail服务

/etc/rc.d/init.d/sendmail stop

Shutting down sendmail:         [ OK ]
Shutting down sm-client:         [ OK ]

2,关闭sendmail自启动

[root@lsp ~]# chkconfig sendmail off

 

3,确认sendmail自启动已被关闭(都为off就OK)

[root@lsp ~]# chkconfig --list sendmail

sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off

--------------

chkconfig --list 可以用来查看所有的服务

如果提示chkconfig命令找不到,可使用/sbin/chkconfig的形式

升级centos5.6到centos6.0

切记升级系统前,请务必备份重要文件!

首先,清除所有软件包

yum clean all
yum list updates
升级centos
yum update
reboot

这样就升级完了,可以检查一下系统目前的版本:

lsb_release -a

这样就升级完了,可以检查一下系统目前的版本:

#rpm -q centos-release

如何查看linux版本

如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案!

1. 查看内核版本命令:

 1) [root@q1test01 ~]# cat /proc/version 

Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005

  2) [root@q1test01 ~]# uname -a 

Linux q1test01 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:00:54 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux

 3) [root@q1test01 ~]# uname -r 

2.6.9-22.ELsmp Continue reading

五步优化你的MongoDB

下面PPT和视频的作者是MongoDB的开发工程师Jared Rosoff,他从下面几个方面对MongoDB的几个优化点进行了讲解和描述。这些优化实际上也适用于很多其它的数据库。

1.查询优化

确认你的查询是否充分利用到了索引,用explain命令查看一下查询执行的情况,添加必要的索引,避免扫表操作。

2.搞清你的热数据大小

可能你的数据集非常大,但是这并不那么重要,重要的是你的热数据集有多大,你经常访问的数据有多大(包括经常访问的数据和所有索引数据)。使用MongoDB,你最好保证你的热数据在你机器的内存大小之下,保证内存能容纳所有热数据。 Continue reading

Redis系统性介绍

虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍。是一个很不错的Redis入门教程。

1.介绍

1.1 Redis是什么

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis提供了一些丰富的数据结构,包括 lists, sets, ordered sets 以及 hashes ,当然还有和Memcached一样的 strings结构.Redis当然还包括了对这些数据结构的丰富操作。 Continue reading

show slave status\G中的Read_Master_Log_Pos和Relay_Log_Pos的(大小)关系

Just to clarify, there are three sets of file/position coordinates in SHOW SLAVE STATUS:

1) The position, ON THE MASTER, from which the I/O thread is reading: Master_Log_File/Read_Master_Log_Pos. -----相对于主库,从库读取主库的二进制日志的位置,是IO线程

2) The position, IN THE RELAY LOGS, at which the SQL thread is executing: Relay_Log_File/Relay_Log_Pos ----相对于从库,是从库的sql线程执行到的位置

3) The position, ON THE MASTER, at which the SQL thread is executing: Relay_Master_Log_File/Exec_Master_Log_Pos ----相对于主库,是从库的sql线程执行到的位置

Numbers 2) and 3) are the same thing, but one is on the slave and the other is on the master. Continue reading

如何在windows下用bat脚本定时备份mysql

作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

并不是所有MySQL都运行在Linux下,windows下也需要做例行备份,下面是用bat脚本做自动化备份的例子,大家可以参考下。

rem
rem C:\Program Files\WinRAR 需要放到 path 下,才能调用rar cli工具
rem
rem 跳转到工作目录下
f:
cd f:\DBBAK
rem 设置变量:备份文件名
SET BAK_FILE=MY_DBBAK_%date:~0,-4%.sql
rem 设置变量:日志文件名
SET LOG_FILE=MY_DBBAK.log
rem 记录日志
echo "%date%" >> %LOG_FILE%
rem 开始做备份
mysqldump --default-character-set=utf8 -hlocalhost -uroot -R --triggers --single-transaction -B mydb > %BAK_FILE%
rem 压缩备份文件
rar a %BAK_FILE%.rar %BAK_FILE%
rem 删除源文件
del /F %BAK_FILE%
echo "%date%" >> %LOG_FILE%
echo "" >> %LOG_FILE%

部署完脚本后,剩下的就是在系统中添加“计划任务”项目了。

mysql主从复制原理

Replication 线程
Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。 Continue reading

[git] Git 高级:Git Reset, Checkout, Diff, Stash

Git Reset

有时候,你可能想要撤销 Git 操作。通常,git reset 就是你需要的命令。但是,使用 git reset 可能会非常复杂,取决于你的撤销操作。如果本文没有提到你需要的,查看 git reset 官方文档

假设,你正在进行一个项目,想要取消所有的改变,返回到最近一次的提交,命令如下:

$ git reset --hard HEAD

–hard flag 将指定提交(上例中,HEAD)中的任意内容放入工作目录和缓存区内。因为 HEAD 是最近一次提交,所以我们没有做任何改变。运行 git status,会看到提示没有需要提交的。

还有其它一些 git reset 使用的 flag。假设你想要回滚你的项目到多个提交之前,但是想要保存没有提交的改变,尝试下面的:

$ git reset --soft 3ce072c72d948abfa

当然,替换为你自己需要的 hash。–soft flag 将保存你的改变在工作目录和缓存区。换句话来说,最新的提交将会是你选择的提交。

还有很多情况,你可以使用 git reset。如果你认为需要这个名利概念的功能,查看文档

Git Checkout

我们之前就提到过 git checkout 命令:用于切换分支。但是还有更多的特性。比如使用 -b flag 同一时间,建立并切换到新分支:

$ git checkout -b newBranchName
 Switched to a new branch ‘newBranchName’

git checkout 也可以进行回滚撤销工作。git reset 回滚整个提交,而 git checkout 可以回滚单个文件。回滚在缓存区内的文件:

$ git checkout -- file.ext

如果需要回滚提交中的文件,替换指定提交的指针,如下所示:

$ git checkout HEAD file.ext
$ git checkout master~2 file.exe

Git Diff

另外一个很有用的 Git 命令是 git diff。使用这个命令找出两个文件,提交或分支之间的改变。假设你想看自从上一次提交后工作目录都有什么改变,可以执行如下命令:

$ git diff

如果只是想看一个文件的改变,添加文件名作为参数:

$ git diff index.html

如果想要比较最新提交和缓存区内的文件,使用 –cached flag。

$ git diff --cached
$ git diff --cached index.html

比较工作目录和一个提交,使用想要比较的提交的指针,代替上例中的 –cached flag。

$ git diff be96dbeab1
$ git diff HEAD^2 index.html

也可以使用 git diff 比较分支。将两个分支名作为参数,两个分支名中间为两个 “.”:

$ git diff master..otherBranch

这样 Git 将会 diff 两个分支的最新提交。如果需要 diff otherBranch 分支和 master 主分支,在分支名间加入三个 “.”。当然,使用你的分支名。

$ git diff master...otherBranch

更多git diff 的用法也可以参考:http://blog.haohtml.com/archives/15420

利用git diff制作补丁Patch用法:http://blog.haohtml.com/archives/15432

Git Stash

有一个有趣的情景:假设你正在编写新特性,但是发现代码中有 bug。而这个bug 与新特性无关,你想要 fix 这个 bug 再继续开发新特性。但是如何处理为新特性写的代码的改变?这里就是 git stash 的用武之地!

git stash 就像是临时提交。当你想要隐藏一些改变,首先将这些改变加入缓存区,再运行下面的:

$ git stash

在主分区,保存工作目录和索引状态 (index state):

HEAD is now at 3d0b0a4 other commit

你会得到一个跟上面很相似的信息,告诉你在特定分支正在进行的工作已经保存。

当你提交过 bug-fix 之后,你可以从 stash 中取出之前的改变。

$ git stash apply

这样会将 stash 中的内容放回缓存区,同时会得到一个很象 git status 的信息。

你可以进行多次 stash,使用 list 命令查看所有的 stashes:

$ git status list
 stash@{0}: On master: started form on contact list
 stash@{1}: On master: README changes

在这个例子中,有两个 stashed 项。但是看到了清晰的 stash message 了嘛?如果需要 stash 多次,描述信息会让你清楚你的项目状态。使用 save 命令来添加 stash message:

$ git stash save “message here”

如果想要将特定 stash 放入缓存区,使用 stash 序号名称,在 list 命令看到的每行开头的信息;如果是将上例中 README 文件放入缓存中,运行如下命令:

$ git stash apply stash@{1}
在使用Git进行push的时候,有可能遇到无法push内容.解决办法请参考:http://blog.haohtml.com/archives/12256