要深入了解Mysql的维护,主要要了解Mysql的状态
仅供参考,我还没仔细看呢

DATETIME 日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。  TIMESTAMP[(M)] 时间戳。范围是'1970-01-01 00:00:00'到2037年。 TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。  TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。  注释:MySQL 4.1以前使用的TIMESTAMP格式在MySQL 5.1中不支持;关于旧格式的信息参见MySQL 4.1 参考手册。
by phpor | 不指定 2011/08/30 23:39 | Mysql | 评论(0) | 引用(0) | 阅读(1615)
mysql在数据量大的时候一般采用分库分表的办法来解决读写慢的问题,为什么分库分表之后读写性能就可以提高了呢?
这里尝试做一下分析:
  • 分库有利于利用更多的硬件来提供服务
  • 分表的依据:
        
              
    1. 单表过大时,索引随之就增大;查询的时候,如果索引不在内存中,大的索引需要更多的载入时间;扫描索引的时间也会变大。写入(增、删、改)的时候,大的索引更新速度也慢。
    2.         
    3. 在对表做写操作时,整个表的query cache将失效,大表失效的cache多,而且失效的几率也大,小表的相反。
    4.     
分库分表的缺点:
  1. 无法做联表查询操作,不过这未尝不是好事,对于大数据量,联表查询基本是不建议使用的。
  2.  

相关资料:
http://zhengdl126.javaeye.com/blog/419850
by phpor | 不指定 2011/03/06 13:24 | Mysql | 评论(1) | 引用(0) | 阅读(984)

MySQL Show命令的使用

show tables或show tables from database_name;
解释:显示当前数据库中所有表的名称

show databases;
解释:显示mysql中所有数据库的名称

show processlist;
解释:显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看
他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。

show table status;
解释:显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间

show columns from table_name from database_name; 或show columns from database_name.table_name;
解释:显示表中列名称

show grants for user_name@localhost;
解释:显示一个用户的权限,显示结果类似于grant 命令

show index from table_name;
解释:显示表的索引

show status;
解释:显示一些系统特定资源的信息,例如,正在运行的线程数量

show variables;
解释:显示系统变量的名称和值

show privileges;
解释:显示服务器所支持的不同权限

show create database database_name;
解释:显示create database 语句是否能够创建指定的数据库

show create table table_name;
解释:显示create database 语句是否能够创建指定的数据库

show engies;
解释:显示安装以后可用的存储引擎和默认引擎。

show innodb status;
解释:显示innoDB存储引擎的状态

show logs;
解释:显示BDB存储引擎的日志

show warnings;
解释:显示最后一个执行的语句所产生的错误、警告和通知

show errors;
解释:只显示最后一个执行语句所产生的错误

by phpor | 不指定 2010/10/29 17:02 | Mysql | 评论(0) | 引用(0) | 阅读(1256)
现象:
新安装了一台机器,Apache + PHP; 访问时候出现错误:
*** glibc detected *** /data1/apache2/bin/httpd: double free or corruption (!prev): 0x0971ef80 ***

调试步骤:
1。 让apache的进程数减少为2个, strace -p pid; 观察异常所在,没有发现明显的出错地点

2。 在请求的PHP文件中添加断点,发现在mysql_connect 时出现的上述错误

3。 ldd mysql.so 和 ldd mysql 相比较,发现使用的libmysqlclient.so文件不同,系统里面有两套;相比是使用的include头文件和lib文件不是一个版本的

4。 删除安装的杂乱的mysql文件

5。 安装: mysql-5.1.47-linux-i686-glibc23.tar.gz    这个解压就行,不需要编译

6。 指定上面解压的mysql目录,重新编译PHP的mysql模块,问题解决

关于启动mysqld的一些问题:
1。 安装mysqld系统表文件,使用脚本scripts/mysql_install_db ; 需要在script平级的目录执行; 其原理是,使用越过权限检查的方式启动mysqld,默认的my.cnf是/etc/my.cnf ; 将创建系统表的sql语句放到mysqld中执行,于是生成的系统表就放在了(my.cnf中指定的)mysql数据库目录中了

2。 安装后的系统表可能用户权限不对,导致无法启动数据库,这就需要修改系统表和mysql数据库的权限了

调试过程中分别使用了:
strace、ldd、sh -x 等办法
by phpor | 不指定 2010/10/29 12:38 | Mysql | 评论(0) | 引用(0) | 阅读(1118)
server-id做什么用的,你知道吗?

1、 mysql的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的

2、 每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。 这里至少有这么一种考虑:
   slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;

3、 在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候有要保证一条数据不会陷入死循环,这里就是靠server-id来实现的

by phpor | 不指定 2010/09/06 22:04 | Mysql | 评论(0) | 引用(0) | 阅读(1416)
分页: 1/4 第一页 1 2 3 4 下页 最后页 [ 显示模式: 摘要 | 列表 ]