ubuntu12.04安装mysql5.5

来源:互联网 发布:淘宝v5会员消费多少钱 编辑:程序博客网 时间:2024/05/27 16:43

原文链接 :

Ubuntu 12.04 配置MySQL 



在Ubuntu12.04 之前的版本中配置MySQL数据库非常方便,只需要运行3条命令即可:

       sudo apt-get install mysql-server

       sudo apt-get install mysql-admin

       sudo apt-get install mysql-query-browser

     今天安装了Ubuntu 12.04 ,mysql-server可以安装成功,但是mysql-admin却找到不到。原来Ubuntu 12.04已经全面升级了MySQL数据库,mysql-server已经升级到5.5.22,MySQL的图形界面mysql-admin和mysql-query-browser也升级到mysql-workbench。

       所以,只要执行两条命令即可:

      sudo apt-get install mysql-server

      sudo apt-get install mysql-workbench

使用注意:

删除外键

建立的时候:

alter table tb_user_role

add constraint fk_user_id_tb_user_role

foreign key(`user_id`)  其他省略...

删除的时候:

alter table tb_user_role

drop foreign key fk_user_id_tb_user_role


安装完原来还得配置,为什么linux的软件就不能零配置呢?

1 配置文件在/etc/mysql/my.cnf

打开它,注释掉

bind-address = 127.0.0.1

2 字符集,建数据库的时候统一全部用utf8

如何配置mysql默认的字符集,以后找到再补上

注意是5.5以后才是:

[mysqld]

.....

character-set-server=utf8

collation-server=utf8_general_ci


utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法,一些字符还是不能支持。
utf8_unicode_ci不能完全支持组合的记号。
utf8_general_ci是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8_unicode_ci的校对规则相比,比较正确性较差。
应用上的差别
1、对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。
2、utf8_general_ci也适用与德语和法语,除了‘?’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用 utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了
参考:
http://www.diybl.com/course/7_databases/mysql/myxl/20100721/474574.html


MySQL(5.5以前,之后的不一定适用)字符集修改命令

1.修改服务器级 a. 临时更改: mysql>SET GLOBAL character_set_server=utf8; b. 永久更改:shell>vi /etc/my.cnf[mysqld]default-character-set=utf8

2.修改数据库级 a. 临时更改: mysql>SET GLOBAL character_set_database=utf8; b. 永久更改:改了服务器级就可以了

3.修改表级 mysql>ALTER TABLE table_name DEFAULT CHARSET utf8; 更改了后永久生效

4.修改列级修改示例: mysql>ALTER TABLE `products` CHANGE `products_model` `products_model` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; 更改了后永久生效 5.更改连接字符集 a. 临时更改:mysql> SET NAMES utf8;b. 永久更改: shell>vi /etc/my.cnf在[client]中增加:default-character-set=utf8





2 解决大小写问题

MySQL在Linux下数据库名、表名、列名、别名大小写规则: 
   1、数据库名与表名是严格区分大小写 

   2、表的别名是严格区分大小写 

   3、列名与列的别名在所有的情况下均是忽略大小写的 

   4、变量名也是严格区分大小写的 

注意: 

A、Linux下MySQL安装完后默认:区分表名的大小写,不区分列名的大小写 

B、改变表名的大小写区分规则的方法:用root帐号登录,在/etc/my.cnf 或 /etc/mysql/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MySQL服务,若设置成功,则不再区分表名的大小写。 

注意:如果在/etc或/etc/mysql找不到my.cnf ,需要从其他地方拷贝过来,因为使用rpm安装mysql时,需要手工拷贝my.cnf。具体操作: 

到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下: 

[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 

其中: 

my-small.cnf是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。 
my-medium.cnf是为中等规模的数据库而设计的。 

my-large.cnf是为专用于一个SQL数据库的计算机而设计的。 

my-huge.cnf是为企业中的数据库而设计的。 

[ Windows ] 

MySQL在Windows下数据库名、表名、列名、别名都不区分大小写。 


如果想大小写区分则在my.ini 里面的mysqld部分 


加入 lower_case_table_names=0 


注意:Windows中即使改了这个设置,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。




常见错误:


http://blog.chinaunix.net/uid-7589639-id-3396287.html

Mysql常见的几个错误问题及解决方法:
1.问题: mysql DNS反解:skip-name-resolve
 
错误日志有类似警告:

点击(此处)折叠或打开

  1. 120119 16:26:04 [Warning] IP address'192.168.1.10' could not be resolved: Name or service not known
  2. 120119 16:26:04 [Warning] IP address'192.168.1.14' could not be resolved: Name or service not known
  3. 120119 16:26:04 [Warning] IP address'192.168.1.17' could not be resolved: Name or service not known

通过show processlist发现大量类似如下的连接:


点击(此处)折叠或打开

  1. |592|unauthenticateduser|192.168.1.10:35320|NULL|Connect||login|NULL|
  2. |593|unauthenticateduser|192.168.1.14:35321|NULL|Connect||login|NULL|
  3. |594|unauthenticateduser|192.168.1.17:35322|NULL|Connect||login|NULL|

 
skip-name-resolve 参数的作用:不再进行反解析(ip不反解成域名),这样可以加快数据库的反应时间。
 
修改配置文件添加并需要重启:

点击(此处)折叠或打开

  1. [mysqld]
  2. skip-name-resolve
 
2.问题错误日志:Error: Can't create a new thread (errno 12)

数据库服务器问题,数据库操作无法创建新线程。一般是有以下3个方面的原因:
1)、MySQL 线程开得太多。
2)、服务器系统内存溢出。
3)、环境软件损坏或系统损坏。
 
【问题解决】


点击(此处)折叠或打开

  1. 1)进入 phpmyadmin 的 mysql 数据库中的 user 表,对数据库的用户进行编辑,修改 max_connections 的值。适当的改小一点。
  2. 2)联系服务器管理员检查服务器的内存和系统是否正常,如果服务器内存紧张,请检查一下哪些进程消耗了服务器的内存,同时考虑是否增加服务器的内存来提高整个系统的负载能力。
  3. 3)mysql版本更改为稳定版本
  4. 4)优化网站程序的sql等等

 
 
3.  操作报错:ERROR 1010 (HY000): Error dropping database


点击(此处)折叠或打开

  1. mysql> drop database xjtrace;
  2. ERROR 1010 (HY000): Error droppingdatabase (can't rmdir './xjtrace/


在做数据库删除时出现这种提示,其原因是在database下面含有自己放进去的文件,譬如*.txt文件或*.sql文件等,只要进去把这个文件删了在执行。


点击(此处)折叠或打开

  1. mysql>drop database xjtrace;
  2. Query OK, 0 rows affected (0.00 sec)

果断删除即可!!
 
4.导出数据很快,导入到新库时却很慢:
 
MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅400万条记录,竟用了近2个小时。在导出时合理使用几个参数,可以大大加快导入的速度。
 
-e 使用包括几个VALUES列表的多行INSERT语法;
--max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
--net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行
注意:max_allowed_packet和net_buffer_length不能比目标数据库的配置数值大,否则可能出错。
 
首先确定目标库的参数值

点击(此处)折叠或打开

  1. mysql> show variables like 'max_allowed_packet';
  2. +--------------------+---------+
  3. | Variable_name | Value |
  4. +--------------------+---------+
  5. | max_allowed_packet | 1048576 |
  6. +--------------------+---------+
  7. 1 row inset (0.00 sec)

  8. mysql> show variableslike 'net_buffer_length';

  9. +-------------------+-------+
  10. | Variable_name | Value |
  11. +-------------------+-------+
  12. | net_buffer_length | 16384 |
  13. +-------------------+-------+
  14. 1 row inset (0.00 sec)


根据参数值书写mysqldump命令,如:

mysql>mysqldump -uroot -p   数据库名 -e --max_allowed_packet=1048576 -net_buffer_length=16384 > SQL文件
 
例如:

点击(此处)折叠或打开

  1. mysql> mysqldump -uroot -p xjtrace -e --max_allowed_packet=1048576 --net_buffer_length=16384>xjtrace_data_`date +%F`.sql

 
之前2小时才能导入的sql现在几十秒就可以完成了。