Tag Archives: mysql

MySQL 4.1+ using old authentication

参考自这里 连接MySQL出现 mysqlnd cannot connect to MySQL 4.1+ using old authentication 错误 打开 /etc/my.cnf 会看到 # Default to using old password format for compatibility with mysql 3.x old_passwords=1 默认使用 old_passwords 格式, 这是为了兼容 mysql 3.x, 如果没有这个需求, 那就用新的密码方式吧! 具体操作步骤如下: 1、编辑my.cnf注释掉一下行: old_passwords = 1 2、重启MySQL service mysqld restart /etc/inint.d/mysqld restart 3、检查是否有16位的密码 SELECT user, Length(`Password`) FROM `mysql`.`user`; 4、如果有,把对应的用户名密码用以下SQL更新 UPDATE [...]
Posted in Linux, Mysql | Tagged | Leave a comment

理解PHP中Mysql的永久连接

参考自这里 PHP程序员应该都知道连接MySQL数据库可以使用mysql_pconnect(永久连接)函数,使用数据库永久连接可以提高效率,但是实际应用中数据库永久连接往往会导致出现一些问题,通常的表现就是在大访问量的网站上时常发生断断续续的无法连接数据库的情况,出现类似"Too many connections in ..."的错误提示信息,重新启动服务器又正常了,但过不了一会儿又出现同样的故障。对于这些问题的成因,恐怕就不是每个人都能说清楚的了,虽然PHP文档里有一些相关资料,但是解释的并不浅显易懂,这里我厚着脸皮试图做一个简单的讨论,所述观点不见得全都正确,欢迎大家反馈意见。 首先看看数据库永久连接的定义: 永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 PHP使用永久连接方式操作MySQL是有前提的:就是PHP必须安装为多线程或多进程Web服务器的插件或模块。最常见的形式是把PHP用作多进程Apache服务器的一个模块。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成Web页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有不同子进程请求SQL服务的后继页面都能够重新使用这个已经建立的 SQL服务器连接。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向 SQL 服务器提出连接请求。每个子进程将对服务器建立各自独立的永久连接。PHP本身并没有数据库连接池的概念,但是Apache有进程池的概念, 一个Apache子进程结束后会被放回进程池, 这也就使得用mysql_pconnect打开的的那个mysql连接资源可以不被释放,而是依附在相应的Apache子进程上保存到了进程池中。于是在下一个连接请求时它就可以被复用。一切看起来似乎都很正常,但是在Apache并发访问量大的时候,如果使用mysql_pconnect,会由于之前的Apache子进程占用的MySQL连接没有close, 很快使MySQL达到最大连接数,使得之后的请求可能得不到响应。 上面的部分文字是摘抄自PHP文档,看起来可能还是有些文绉绉的不好理解,那么我就用大白话再举一个例子来说明问题: 假设Apache配置最大连接数为1000,MySQL配置最大连接数为100,当Apache服务器接到200个并发访问的时候,其中100个涉及到数据库访问,剩下的100个不涉及数据库访问,因为这个时候还不存在可用的数据库连接,所以这里面涉及到数据库访问的100个并发会同时产生100个数据库永久连接,达到了数据库最大连接数,当这些操作没有结束的时候,任何其他的连接都无法再获得数据库连接,当这些操作结束了,相应的连接会被放入进程池,此时Apache的进程池里就有了200个空闲的子进程,其中100个是带有数据库连接的,由于Apache会为访问请求随机的挑选空闲子进程,所以你得到的子进程很可能是不包含数据库连接的那100个中的一个,而数据库连接已经达到了最大值,你也不可能成功的建立新的数据库连接,唉,你便只好不停的刷新页面,哪个时候运气好,碰巧分配到了带有数据库连接的子进程,才能正常浏览页面。如果是大访问量的网站来说,任何时候都可能存在大量的并发,所以浏览者可能就会不停的发现无法连接数据库的现象了。 或许你会说,我们把Apache和MySQL的最大连接数调成一样大不就可以了么?是的,合理的调整这个最大连接数某种程度上会避免这个问题的发生,但是Apache和MySQL的负载能力是不同的,如果按照Apache的负载能力来设置,对于MySQL来说,这个最大连接数就偏大,会产生大量的MySQL数据库永久连接,打个比方,就好像和平时代还要养活一个几百万的军队一样,其开销得不偿失;而如果按照Mysql的负载能力设置,对于Apache来说,这个最大连接数就偏小,有点杀鸡牛刀的感觉,无法发挥Apache的最大效率。 所以按照PHP手册上的介绍,只适合在并发访问不大的网站上使用数据库永久连接,但对于一个并发访问不大的网站来说,使用数据库永久连接带来的效率提高似乎没有太大的意义,从这个角度上来看,我觉得PHP中的数据库永久连接基本上是一个鸡肋的角色,如果你一定要使用数据库连接池的概念,可以尝试一下sqlrelay或者Apache本身提供的mod_dbd,说不定会有惊喜。
Posted in Apache, Mysql, PHP | Also tagged | Leave a comment

C 操作 MySql

1, 启动 mysql 服务 #我安装的是 lampp , 安装路径是 /opt/lampp/lampp /opt/lampp/lampp start 2, 查询 mysql_config 位置 whereis mysql_config # 显示位置为 /opt/lampp/bin/mysql_config 3, 编写测试脚本 test_mysql.c /* Simple C program that connects to MySQL Database server */ #include <stdio.h> #include <mysql.h> #include <stdlib.h> void main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "localhost"; char *user [...]
Posted in Linux, Mysql, shell | Also tagged , | Leave a comment

MySql 5.5 只能使用 ENGINE 选项指定存储引擎

同事在用 Navicat 8.0 连接测试机上的 MySql 创建数据表时发现老是报语法错误, 而连接自己电脑上的 MySql 并使用相同操作时却能创建成功. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE = MYISAM' at line 1 Navicat 8.0 当创建数据表时指定了数据表的存储引擎时生成的 SQL 语句是类似 CREATE TABLE test (id INT) TYPE = MYISAM; [...]
Posted in Mysql | Tagged | Leave a comment

怎样保存 Checkbox 值

预备知识点: 二进制数值: 0的二进制数值是 0 1的二进制数值是 1 2的二进制数值是 10 3的二进制数值是 11 4的二进制数值是 100 5的二进制数值是 101 6的二进制数值是 110 ... 在 php 中可以通过 decbin() 函数将十进制数字转换为二进制数字. 位运算符 & (按位与), 什么是 & 运算呢? 以 $c = $a & $b 表达式为例, & 运算是将 $a, $b 的二进制数值相比较, 只要两个二进制数中某位都是1, 则结果的二进制数中该位都为1, 否则结果为 0. 假设: $a 的值为 2 (十进制), 它的二进制数值为 10 $b 的值为 4 (十进制), [...]
Posted in JavaScritp, Mysql, PHP, html | Also tagged , , | Leave a comment

Mysql 事务简介

什么是事务? 通俗点来说, 事务就是对一组由N条SQL语句(N>=1)组成的逻辑处理单元进行并发控制. 当这组SQL语句都执行成功时才会对数据库构成实际影响. 否则只要有一条SQL语句执行失败, 那么整组SQL都不会执行成功, 都不会对数据库有实际影响. 这样能确保这个事务中的这组SQL操作的统一性, 保证数据一致性. 我们来结合实际的例子来理解事务的概念: -- 在 phpMyAdmin 中执行下面的操作 -- 1, 建立不支持事务的数据表 tbl_a CREATE TABLE IF NOT EXISTS `tbl_a` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ; -- 2, 为 tbl_a 插入数据, 将下面 4 条语句全部复制, 用 phpMyAdmin 一并执行 INSERT INTO tbl_a [...]
Posted in Mysql | Also tagged | Leave a comment

配置 Mysql 允许远程连接

MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说是没有问题的. 但随着网站流量的增加, 后期服务器架构可能会将 Web-Server 与 MySql-Server 分别放在独立的服务器上, 以便得到更大性能的提升, 此时 MySql-Server 就要修改成允许 Web-Server 进行远程连接. 假设我们有: Web-Server : 192.168.1.100 //ubuntu Mysql-Server : 192.168.1.101 //xp 我们可以按照下面的步骤修改: 1, 登录 Mysql-Server 连接本地 mysql (默认只允许本地连接) Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:\Documents and Settings\kuco>mysql -h localhost -u root -p Enter [...]
Posted in Mysql, PHP | Also tagged , | Leave a comment

mysql 数据导入与导出

# 数据导出 mysqldump # 导出一个表 /usr/local/mysql/bin/mysqldump -u root -character-set=utf8 -p -h 127.0.0.1 db_name table_name > /root/table.sql # 导出一个库 /usr/local/mysql/bin/mysqldump -u root -character-set=utf8 -p -h 127.0.0.1 db_name > /root/db.sql # 数据导入 source /usr/local/mysql/bin/mysql -h localhost -u root -p use db_name; source /root/db.sql # 数据导入 mysql /usr/local/mysql/bin/mysql -h localhost -u root -p pwd db_name < /root/db.sql
Posted in Mysql | Tagged | Leave a comment

python 连接 mysql

部分内容参考自: http://mysql-python.sourceforge.net/MySQLdb.html http://peak.telecommunity.com/DevCenter/EasyInstall http://blog.sina.com.cn/s/blog_57b671b601008bsw.html 1, 下载 MySQLdb 的库 下载地址 http://sourceforge.net/projects/mysql-python 会得到一个 *.egg (类似 MySQL_python-1.2.2-py2.4-win32.egg )
Posted in Mysql, Python | Also tagged | Leave a comment