显示标签为“MySql”的博文。显示所有博文
显示标签为“MySql”的博文。显示所有博文

2014年5月19日星期一

MySql.Data.MySqlClient.MySqlException: Too many connections

web程序在访问mysql数据库时报错

MySql.Data.MySqlClient.MySqlException: Too many connections

1、要先关闭IIS进程
2、关闭mysql进程,找到mysql服务,右键转到mysql进程,kill掉。
3、重新启动IIS
4、重新启动mysql服务

2013年11月2日星期六

Emoji 表情 无法插入 MySql

http://wpceo.com/supporting-emoji-on-php-mysql/

从 iOS5 开始,苹果开始支持标准的 Unified 编码的 Emoji 表情。这其中最大的优点莫过于统一了规格,方便了用户和开发者。但是,Web 开发者在开发网页端的时候就会遇到一些问题,以往直接把 Emoji 表情存储在数据库中现在则会导致乱码。这是由于采用 Unified 标准的单个 Emoji 字符一般为 4 个字节,超过了 MySQL 数据库 utf8 字符集支持的每个字符 3 个字节的限制,存入数据库以后会产生乱码或者破坏数据。
如果说解决该问题,最方便的做法是在存入数据库之前,把每个 Emoji 字符转化为 UBB 代码,或者是其他可辨认的形式,如 HTML 转义字符。还是以太阳符号为例,它的 Unified Emoji 编码为 U+2600,在存入数据库时,可以把它转换成  UBB 代码 [emoji]2600[/emoji] 保存,也可以使用 HTML 转义字符  储存。如果在 Web 前端展示,用 HTML 转义字符可以直接输出,用 UBB 代码则方便论坛等需要严格安全验证用户输入的地方使用。
还有一种做法你可能也猜到了,采用 SoftBank 方案的单个 Emoji 表情占用 3 个字节,可以直接保存在数据库里,所以可以把 Unified Emoji 转化为 SoftBank Emoji 格式,存储在数据库中就不会有任何问题了。
另外一种方式从 MySQL 自身解决。从 MySQL 5.5.3 开始,MySQL 支持一种 utf8mb4 的字符集,这个字符集能够支持 4 字节的 UTF8 编码的字符。 utf8mb4 字符集能够完美地向下兼容 utf8 字符串。在数据存储方面,当一个普通中文字符存入数据库时仍然占用 3 个字节,在存入一个 Unified Emoji 表情的时候,它会自动占用 4 个字节。所以在输入输出时都不会存在乱码的问题了。要使用 MySQL 的这个特性,首先需要把 M ySQL 升级到 5.5.3 以上的版本。其次,需要修改数据结构中的字符集为 utf8mb4 ,如 utf8mb4_general_ci 。由于 utf8mb4 是 utf8 的超集,从 utf8 升级到 utf8mb4 不会有任何问题,直接升级即可;如果从别的字符集如 gb2312 或者 gbk 转化而来,一定要先备份数据库。然后,修改 MySQL 的配置文件 /etc/my.cnf,修改连接默认字符集为 utf8mb4 ,如果是自己写的 PHP 脚本,也可以在连接数据库以后首先执行一句 SQL: SET NAMES utf8mb4;。这时候,PHP 应该就可以正常保存 Emoji 到数据库了。

iOS6 的解决方案

苹果在 iOS6 和 Mac OS X 10.8 中又增加了 300 多个 Emoji 表情,而 SoftBank 编码因为渐渐被历史淘汰,已经没有了相应的升级,所以上文提到的把 Unified Emoji 转化为 SoftBank Emoji 后保存在数据库中的方案已经落伍了。

最终解决方案

说了那么多,最终还是要归纳总结一下解决方法。
从数据库中保存的形态出发,要么用 UBB 或者 HTML 转义字符等替代方法保存,要么用数据库直接存储 Emoji 字符。如果直接保存 Emoji 字符,则必须将 MySQL 升级到 5.5.3 以上并且采用 utf8mb4 字符集。如果用替代方法,则不用升级数据库,不影响现有的服务器,是比较省事的方法。
在用户输入方面,以某著名门户新闻客户端为例,常见的几个平台包括:Web,iOS,安卓等。 Web 端上主要是让用户通过点击图标输入 Emoji 表情,在文本框里可以直接以 UBB 代码[emoji]2600[/emoji] 的形式显示,也要考虑 Mac OS X 或 iOS 移动网页端用户直接通过键盘输入 Emoji 字符,这时候最好在 CSS 里添加 textarea{font-family:"Apple Color Emoji","Arial";} ,以便 Mac OS X 上的 Chrome / Firefox 浏览器用户输入了表情以后能直接显示出来,而不是黑框框。iOS 客户端不必说了,直接让用户使用 iOS 自带的表情键盘即可。至于 Android, Windows Phone 或者黑莓等其他平台,一般要通过第三方的输入法来输入 Emoji 表情。至于用户输入的 Emoji 字符还是 UBB 代码,服务器端应该都要有处理的能力。值得注意的是,可能 SoftBank 等 Emoji 字符集都已经不是主流了,在中国的用户估计很少,但如果你想做一个像微信那么跨国界的 APP,还是不妨加一个转换,首先将各种形式的 Emoji 字符首先转换为 Unified Emoji。
在 Web 端显示方面,出于各平台的兼容性考虑,把 Emoji 表情通过图片输出是最合适的做法。无论在数据库中我们保存的形态是什么,把它转化为图片都需要一个对应表。Emoji for PHP已经实现了 iOS5 的 500 多个表情的支持,但尚未提供 iOS6 新增的 300 多个表情。我虽然已经做了对应关系,但是因为没有整理出代码,暂时没办法放出来。





2013年9月17日星期二

OSX10.7 安装mysql-python报错cc1: error: unrecognized command line option

Mac OS X 10.7 安装 mysql-python 报错

cc1: error: unrecognized command line option "-Wno-null-conversion"
error: Setup script exited with error: command 'llvm-gcc-4.2' failed with exit status 1

应该是 llvm-gcc-4.2 的编译器不识别 option 导致的



http://stackoverflow.com/questions/16127493/cc1-error-unrecognized-command-line-option-wno-null-conversion-within-insta


将 mysql_config 里面的相关 option 去掉再次编译就可以了 



Try to Remove cflags -Wno-null-conversion -Wno-unused-private-field in
/usr/local/mysql/bin/mysql_config.
like:
cflags="-I$pkgincludedir  -Wall   -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 "

2013年7月10日星期三

mysql命令

1、mysql登录

mysql –u 用户名 [–h主机名或者IP地址] –p 密码
说明:用户名是你登录的用户,主机名或者IP地址为可选项,如果是本地连接则不需要,远程连接需要填写,密码是对应用户的密码。

mysql 没有 用户名也是可以登录的,只是没有权限,如查看所有db权限、创建db权限等等。
默认有一个root帐户,密码为空。

如果用一个没有帐户的名字登录mysql,相当于没有输入用户名
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

2、删除创建数据库
  • CREATE DATABASE 语句
    创建一个数据库很容易;只要在CREATE DATABASE 语句中给出其名称即可:
create database db_name
    其中限制条件是该数据库的名称必须是合法的,该数据库必须不存在,并且您必须有足够的权限来创建它。
  • DROP DATABASE 语句
    删除数据库就像创建它一样容易,假如有权限,执行下列语句即可:
drop database db_name
    请注意,不要乱用DROP DATABASE 语句,它将会删除数据库及其所有的表。在删除了一个数据库后,该数据库就永远没有了。换句话说,不要仅为了看看这条语句如何工作就试着执行该语句。如果管 理员已经正常完成了数据库备份,那么删除的数据库可能还可以恢复。
请注意,数据库是由数据目录中的一个目录表示的。如果在该目录中放置了一些非表的数据文件,它们是不会被DROP DATABASE 语句删除的。此时,该数据库目录自身也不被删除。
  • USE 语句
    USE 语句选择一个数据库,使其成为服务器的给定连接的缺省(当前)数据库:
use db_name

    必须对数据库具有某种访问权限,否则不能使用它。为了使用数据库中的表而选择该数据库实际上不是必须的,因为可以利用db_name.tbl_name 形式来引用它的表。但是,不必指定数据库限定词引用表要方便得多。选择一个缺省数据库并不代表在连接的持续时间内它都必须是缺省的。可发布任意数目的 USE 语句在数据库之间进行任意地切换,只要具有使用它们的权限即可。选择一个数据库也不限制您只使用该数据库中的表。您仍然可以通过用数据库名限定表名的方 法,引用其他数据库中的表。

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):
1.新建用户
  • 登录MYSQL:
  @>mysql -u root -p
  @>密码
  • 创建用户:
  mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
  这样就创建了一个名为:test 密码为:1234 的用户。
  注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
  • 然后登录一下:
  mysql>exit;
  @>mysql -u test -p
  @>输入密码
  mysql>登录成功
2.为用户授权
  授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
  • 登录MYSQL(有ROOT权限),这里以ROOT身份登录:
  @>mysql -u root -p
  @>密码
  • 首先为用户创建一个数据库(testDB):
  mysql>create database testDB;
  • 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
   mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
   mysql>flush privileges;//刷新系统权限表
  格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
  • 如果想指定部分权限给一用户,可以这样来写:
  mysql>grant select,update on testDB.* to test@localhost identified by '1234';
  mysql>flush privileges; //刷新系统权限表
  • 授权test用户拥有所有数据库的某些权限   
  mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
     //test用户对所有数据库都有select,delete,update,create,drop 权限。
  //@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
//对localhost授权:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';即可。
3.删除用户
 @>mysql -u root -p
 @>密码
 mysql>Delete FROM user Where User='test' and Host='localhost';
 mysql>flush privileges;
 mysql>drop database testDB; //删除用户的数据库
删除账户及权限:>drop user 用户名@'%';
        >drop user 用户名@ localhost; 
4.修改指定用户密码
  @>mysql -u root -p
  @>密码
  mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";
  mysql>flush privileges;
5.列出所有数据库
mysql>show database;
6.切换数据库
mysql>use '数据库名';
7.列出所有表
mysql>show tables;
8.显示数据表结构
mysql>describe 表名;
9.删除数据库和数据表
mysql>drop database 数据库名;
mysql>drop table 数据表名;



一, 创建用户:

       命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

       说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

      例子: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
               CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
               CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
               CREATE USER 'pig'@'%' IDENTIFIED BY '';
               CREATE USER 'pig'@'%';

二,授权:

      命令:GRANT privileges ON databasename.tablename TO 'username'@'host'

     说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等.如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.

      例子: GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
               GRANT ALL ON *.* TO 'pig'@'%';

      注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
           GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

三.设置与更改用户密码

     命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");

      例子: SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");

四.撤销用户权限

      命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';

     说明: privilege, databasename, tablename - 同授权部分.

      例子: REVOKE SELECT ON *.* FROM 'pig'@'%';

      注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%', 则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限.

      具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看.

五.删除用户

      命令: DROP USER 'username'@'host';

2013年7月9日星期二

mysql_connect报告“No such file or directory”错误的解决方法

http://tech.idv2.com/2011/04/27/mysql_connect_no_such_file/

http://www.pvsky.com/blog/20121210/504.html

如果是nginx用的php-fpm的话,就需要重新启动php-fpm。





今天在MacBookPro上安装wordpress时,安装程序一直报错说连不上数据库。mysql客户端可以正常使用,可以确定不是服务器的问题。写了个php脚本单独执行mysql_connect(),发现错误信息居然是“No such file or directory”!这里应该没涉及到文件啊?
在网上搜了一下,找到了这篇文章:mysql_connect and No such file or directory。原来,我的apache/php是mac系统自带的,而mysql是通过MacPorts安装的,它的本地socket设置与默认的不一样,导致php无法找到mysql的socket文件。解决方法上面那篇文章也给了,这里简单翻译一下:
  1. 首先确定是mysql_connect()mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No such file or directory”。
  2. 写个phpinfo页面,找到mysql.default_socketmysqli.default_socketpdo_mysql.default_socket
  3. 启动mysql,执行命令 STATUS; 记下UNIX socket的值。
  4. 如果2和3的值不一样,则打开php.ini(可以从phpinfo页面中找到php.ini的位置,默认是/private/etc/php.ini),将2中提到的三个配置项的值改成3的值。
  5. 重启apache。

2013年5月2日星期四

mac 配置mysql命令,修改root密码,启动项等

1) ~/.bash_profile文件里添加mysql的path
export PATH=/usr/local/mysql/bin:$PATH
2)$source ~/.bash_profile
3)修改mysql密码
$mysqladmin -u root password
4)登录mysql
$mysql -u root -p
5)启动/停止开机启动中的mysql服务:
$sudo /Library/StartupItems/MySQL/MySQL start/stop

1、使用SHOW语句找出在服务器上当前存在什么数据库: 
mysql> SHOW DATABASES; 
+----------+ 
| Database | 
+----------+ 
| mysql | 
| test | 
+----------+ 
3 rows in set (0.00 sec)

2、创建一个数据库abccs 
mysql> CREATE DATABASE abccs; 
注意不同操作系统对大小写的敏感。 
3、选择你所创建的数据库 
mysql> USE abccs 
Database changed 
此时你已经进入你刚才所建立的数据库abccs. 
4、 创建一个数据库表 
首先看现在你的数据库中存在什么表: 
mysql> SHOW TABLES; 
Empty set (0.00 sec) 
说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable:   我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 
mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), 
-> birth DATE, birthaddr VARCHAR(20)); 
Query OK, 0 rows affected (0.00 sec)

由于name、birthadd的列值是变化的,因此选择VARCHAR,其长度不一定是20。可以选择从1到255的任何长度,如果以后需要改变它的字长,可以使用ALTER TABLE语句。);性别只需一个字符就可以表示:"m"或"f",因此选用CHAR(1);birth列则使用DATE数据类型。 
创建了一个表后,我们可以看看刚才做的结果,用SHOW TABLES显示数据库中有哪些表: 
mysql> SHOW TABLES; 
+---------------------+ 
| Tables in menagerie | 
+---------------------+ 
| mytables | 
+---------------------+

5、显示表的结构: 
mysql> DESCRIBE mytable; 
+-------------+-------------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------------+-------------+------+-----+---------+-------+ 
| name | varchar(20) | YES | | NULL | | 
| sex | char(1) | YES | | NULL | | 
| birth | date | YES | | NULL | | 
| deathaddr | varchar(20) | YES | | NULL | | 
+-------------+-------------+------+-----+---------+-------+ 
4 rows in set (0.00 sec)

6、 往表中加入记录 
我们先用SELECT命令来查看表中的数据: 
mysql> select * from mytable; 
Empty set (0.00 sec)
这说明刚才创建的表还没有记录。 加入一条新记录: 
mysql> insert into mytable 
-> values (′abccs′,′f′,′1977-07-07′,′china′); 
Query OK, 1 row affected (0.05 sec)

再用上面的SELECT命令看看发生了什么变化。我们可以按此方法一条一条地将所有员工的记录加入到表中。 
7、用文本方式将数据装入一个数据库表 
如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在CREATE TABLE语句中列出的列次序给出,例如: 
abccs f 1977-07-07 china   
mary f 1978-12-12 usa 
tom m 1970-09-02 usa

使用下面命令将文本文件“mytable.txt”装载到mytable表中:mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet; 
再使用如下命令看看是否已将数据输入到数据库表中:mysql> select * from mytable;

Mac os x Lion 安装MySQLdb for python



第一步安装 mysql
1.到官方下载 http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5/mysql-5.5.23-osx10.6-x86_64.dmg
2.安装mysql-5.5.23-osx10.6-x86_64.pkg 并 安装 Mysql.prefPane 偏好设置页面
3.下载mysqldb http://sourceforge.net/projects/mysql-python/files/mysql-python/
4.运行PATH=$PATH:/usr/local/mysql/bin 否则无法找到mysql_config
5.
python setup.py build
python setup.py install
6.最后运行下面命令,否则找不到libmysqlclient.18.dylib
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/

然后就可以正常使用了...

MAC下安装与配置MySQL

http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html



一 下MySQL
    访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL Community Server”下方有一个“download”点击。
进入MySQL的下载界面(http://www.mysql.com/downloads/mysql/),如果你是用的Mac OS来访问的话那么就会默认为你选好了Mac OS X 平台,而下面罗列的都是在Mac OS上能用的MySQL的版本,如果是用的其他平台,在“Select Platform”选项的下拉列表中选一下就好了。
      在Mac OS上的MySQL的版本很多,其中有按平台来的,比如10.5/10.6等平台,然后有32位的和64位的,这个你按照自己系统的情况来进行选择,然后就是文件的后缀名有.tar.gz的和.dmg的,这里我选择的是.dmg的。点击右侧的download进行下载。
       然后会跳转到另外一个界面,这个界面是提示你需不需要注册的,直接选择最下面的“No thanks,just take me to downloads!”,然后这才真正跳转到了下载的界面,这个界面列了很多的供下载的服务器,选择一个服务器进行下载就OK了。
二 安装MySQL
      打开MySQL的安装包:
分别安装
mysql-5.5.16-osx10.6-x86_64.pkg:这个是MySql的主要程序包;
MySQL_StartupItem.pkg:MySql的启动项;
MySQL.prefPane:安装完成后会在系统的偏好设置里面出现,是MySQL的偏好设置,里面主要是用来启动MySQL服务的.

三 下安装MySQL Workbench(GUI Tool)
3.1 MySQL Workbench的下
      访问http://www.mysql.com/downloads/ 在下面有一个MySQL Workbench(GUI Tool)的项,点击其下的DOWNLOAD即可进入下载界面:
      然后同样选择版本之后选择服务器进行下载。这里貌似只有一个版本:

3.2 MySQL Workbench的安装
下载完成之后安装就非常简单,双击即可安装。安装完成之后我们在“应用程序”里面就能看到MySQL Workbench.app程序了。双击打开:
到这里MySql Workbench就安装完毕了。
      安装完成之后我们就讲MySQL Workbench连接到MySQL的数据库上,然后对数据库进行管理。

3.3 建立一个新
      可以看到MySQL Workbench的主界面有三大模块,SQL Development,Data Modeling,Server Administration。其中在SQL Development下面有一个“New Connection”点击之后就会出现一个“Setup New Connection”的对话框,填写完Connetion Name之后点击Ok。即可完成一个连接到本地数据库的连接。
   完成之后在主界面的就会出现刚才建立的连接,如下图:
 双击连接名或者选中一个连接之后点击“Open Connection to Start Querying”,即可进入这个操作数据库的界面:
这些所有的前提都是数据库服务得打开。

3.4 管理数据访问
      MySQL的默认账号密码是root/root,正常情况下我们如果单纯的只是使用MySQL Workbench来管理数据库的这个账号是可以的,但是当我们在编程代码中通过jdbc来访问MySQL时我们就会发现使用这个账号是不行,无法访问,因为MySQL需要我们更改密码,也就是说root这个是个默认的密码也就是弱密码,需要我们修改之后才能在代码中使用。因此我们需要来管理数据库的访问密码。
      新建一个Server Instance
      在“Server Administration”模块下有个“New Server Instance”点击之后会弹出一个“Create New Server Instance Profile”的对话框,跟着对话框的一步一步走就可以完成,一般本地的数据库直接跟着默认设置就ok。完成之后我们就能够在Workbench的主界面最右边看到刚才建立的instance。
 
双击打开管理器,这里需要密码,一般还没改过的就是root。然后在左侧的菜单栏下有个“SECURITY”下面有个“Users and Privileges”的子菜单项,选择就会看到如下界面:
在右侧的面板中有一个User Accounts的列表,选择其中要修改密码的账号,然后在右侧修改密码即可。