MySQL临时表:Internal和Used-defined

为什么突然想说说临时表呢,之前都没有太过多的留意这些知识,是昨天以前的一个同事问了我一句关于临时表的疑问,我也顺便加深写认识。其实,我对于MySQL临时表的应用可以说是一无所知,说的最多听得最多的也都是,查询语句时用到临时表的情况,就是说的internal temporary table,是MySQL自己因为执行某个操作需要额外使用的,而另一种就是user-defined,用户自己定义的(create temporary table); 之前在798game的时候,公司的手游数据库的设计用到了大量临时表。下面是一些可能在某种意义上,你会觉得很不靠谱的认识,因为这些只是看了一些文字后的皮毛理解。

Internal Temporary Table
      » 继续阅读 MySQL临时表:Internal和Used-defined

DRBD+Heartbeat让MySQL提供的服务更加稳定

这段时间对DRBDHeartbeat有了一个初步的了解,因为公司目前也在用,所以要好好搞一下,今天就在虚拟机打个了环境,亲自动手学习一下。这两个软件的安装都不复杂,如果你能用yum,那就是瞬间搞定的事情,没有的话用rpm包安装也是很轻松的事情,个人觉得,如果不是说地球上真的找不到和你平台对应的rpm包/tar包的话,那你就用源码包好了,自己享受编译带给你的“成就感”吧。不知道为什么很多时候大家都喜欢源码编来编去的,其实,你编译出来的东西不一定比人家专门的开发人员编出的软件效果要好,也可能你会说了,自己编译自由想放哪儿就放哪儿(难道就这么点追求),如果你习惯了rpm,其实,它的安装目录就那么几个位置,况且rpm也有命名选项帮你找出来。

实验环境:

centos 5.5 32位 + drbd-8.0.16 + heartbeat-2.1.3

node1:  drbd-one  192.168.209.12 (primary)

node2: drbd-two 192.168.209.11 (secondary)

vip: 192.168.209.13 ( for heartbeat )

NOTE: drdb和heartbeat的安装配置都需要在两台机器上,做相应的操作,大家需要注意操作步骤上的不同。
      » 继续阅读 DRBD+Heartbeat让MySQL提供的服务更加稳定

一个MySQL字符集小问题

前不久Moblin的项目要本地化,开发人员需要发行一个中文版(测试中),在网页上方language的地方有个选择语言的下拉框,显示“简体中文”选项有问题,不是出现问号就是小方格。问题之初就定位到数据库字符集,但是在调试个级别字符集的过程中,通过mysql客户端以及sqlyog GUI工具的查看都正常可以看到汉字,但是前端应用界面始终不正常,于是便开始怀疑是不是webrick不支持中文输出呢,但是其他部分的中文都可以正常输出,后来重新回到到MySQL上。

情景:最初设置的字符集,能够满足通过前段应用程序输入中文,同时显示也没有问题。其中,恰恰有一个表中的一个字段是需要开发人员从后台直接向数据库中插入汉字——“简体中文”。这时,如果用原有的字符集设置就存在上述问题。

前后调整如下:

调整前:

服务器级:character_set_server = utf8

数据库级:character_set_database = utf8

表级:default charset = utf8


      » 继续阅读 一个MySQL字符集小问题

如何让你的数据库更加自动化

· MySQL的开机自启方法比较简单。就拿Linux下面的设置说说。

二进制包和源码包安装以后,你需要进行如下操作:

1. # cp $MYSQL_HOME/support-files/mysql.server  /etc/rc.d/mysql   (将MySQL做成一个开机自启动服务。)

2. # chkconfig  –level 345 –add mysql (将mysql服务设置为开机自启动。)

这样你就不用担心,有一天你的服务器突然重启后,你的MySQL数据库起不来了。

如果你是rpm包安装就更省心了,直接执行上面第二步就可以了。

· Oracle的自动又是如何实现的呢,在之前的一个篇文章中我曾经提到过,可以采用一个脚本加oratab这个配置文件来实现,具体操作如下。

1. 准备我们需要的启动脚本,我们知道oracle实例的启动与数据库的加载打开,都是要在oracle用户下完成的。

dbora脚本

#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.

ORA_HOME=/u01/app/oracle/product/10.2.0/db_1
ORA_OWNER=oracle
      » 继续阅读 如何让你的数据库更加自动化

MySQL升级的3种方法

MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的MySQL变得更美好,我们有必要去给它升级,尽管你会说它现在已经跑得很好很稳定完全够用了。下面我们来看看几种常用的升级方法。

介绍之前,我们先做一些声明,MySQL采用二进制包来安装,升级都是在同一台DB Server上操作。

第一种,很简单,适用于任何存储引擎。

1. 下载并安装好新版本的MySQL数据库,并将其端口改为3307(避免和旧版本的3306冲突),启动服务。

2. 在新版本下创建同名数据库。

# mysqldump  -p3307  -uroot  create mysqlsystems_com

3. 在旧版本下备份该数据库。

# mysqldump  -p3306  -uroot mysqlsystems_com > mysqlsystems_com.bk

Note: 你也可以加上–opt选项,这样可以使用优化方式将你的数据库导出,减少未知的问题。

4. 将导出的数据库备份导入到新版本的MySQL数据库中。

# mysql -p3307 -uroot mysqlsystems_com < mysqlsystems_com.bk

5. 再将旧版本数据库中的data目录下的mysql数据库全部覆盖到新版本中。

# cp -R /opt/mysql-5.1/data/mysql  /opt/mysql-5.4/data

Note: 大家也都知道这个默认数据库的重要性。

6. 在新版下执行mysql_upgrade命令,其实这个命令包含一下三个命令:

# mysqlcheck –check-upgrade –all-databases –auto-repair
# mysql_fix_privilege_tables
# mysqlcheck –all-databases –check-upgrade –fix-db-names –fix-table-names

Note: 在每一次的升级过程中,mysql_upgrade这个命令我们都应该去执行,它通过mysqlcheck命令帮我们去检查表是否兼容新版本的数据库同时作出修复,还有个很重要的作用就是使用mysql_fix_privilege_tables命令去升级权限表。

7. 关闭旧版本,将新版的数据库的使用端口改为3306,重新启动新版本MySQL数据库。到此,一个简单环境下的数据库升级就结束了。


      » 继续阅读 MySQL升级的3种方法