zoukankan      html  css  js  c++  java
  • MySQL数据库(6)----配置文件 my.cnf 的使用

    1.  使用源码安装好MySQL后,其配置文件一般位于 /usr/local/my.cnf,可以使用如下命令查看查看配置文件的搜索顺序:

    root@javis:~$ mysqld --help --verbose | grep -B1 -i "my.cnf"
    2016-07-26 20:12:24 0 [Note] mysqld (mysqld 5.6.31) starting as process 5732 ...
    2016-07-26 20:12:24 5732 [Note] Plugin 'FEDERATED' is disabled.
    Default options are read from the following files in the given order:
    /etc/mysql/my.cnf /etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf 
    --
      -P, --port=#        Port number to use for connection or 0 to default to,
                          my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
    2016-07-26 20:12:25 5732 [Note] Binlog end
    2016-07-26 20:12:25 5732 [Note] Shutting down plugin 'MyISAM'
    2016-07-26 20:12:25 5732 [Note] Shutting down plugin 'CSV'

    可以看到,红色标记的那一段话显示搜索 my.cnf 的顺序为 /etc/mysql/my.cnf、/etc/my.cnf、/usr/local/mysql/my.cnf、~/.my.cnf。

    使用 'ls /etc/mysql' 命令查看到本机没有 /etc/mysql 目录。为了加快搜索速度,将 my.cnf 文件从 /usr/local/mysql/my.cnf 移动到 /etc/my.cnf

    mv /usr/local/mysql/my.cnf  /etc/my.cnf

    2. 配置 my.cnf ,是MySQL默认使用小写的名字来对数据库和表进行命名。

      UNIX/Linux系统上的MySQL会区分数据库和表名字的大小写。解决此问题的一种办法是,固定使用一种大小写形式的名字。另一种办法是,在启动服务器时,将 lower_case_table_names 系统变量设置为1,这个设置有下面两个效果:

    (i)在为某个表创建相应的磁盘文件之前,服务器会先把该表的名字转换为小写。

    (ii)在语句里引用这个表时,服务器会在试图到磁盘上查找这个表之前,把它的名字转换为小写。

      这种做法的结果是,不管文件系统是否区分大小写,所有名字都不会区分大小写。如此一来,在系统间移动数据库和表会变得容易。不过,这里提醒一下,如果打算使用这种策略,则必须在开始创建数据库或表之前(而不是之后)通过服务器配置,将 lower_case_table_names 系统变量设置为1。如果在设置此变量之前,已经创建了数据库或表,而且其名字里包含大写字母,那么这个设置将无法产生预期的效果,因为磁盘里已经存储了某些不全为小写字母的名字。为避免出现这个问题,可以先把名字里有大写字母的表全部重新命名为小写字母形式,然后再来设置 lower_case_table_names 系统变量。(可以用 ALTER TABLE 或 RENAME TABLE 语句来重新命名表。)如果有很多表需要重新命名,或者有许多数据库的名字包含大小写字母,那么更简单的办法是选转储这些数据库,然后在设置了 lower_case_table_names 系统变量之后,再重新创建它们。步骤如下:

     (1)用 mysqldump 工具将各个数据库转储出来:

    % mysqldump --database -p -uroot db_name > db_name.sql

    (2)用 DROP DATABASE 语句删除这些数据库。

    (3)关闭服务器,配置 my.cnf 文件,添加 'lower_case_table_names=1' 语句,然后重启 mysqld 服务器。

    (4)用mysql 程序重新加载所有的转储文件:

    % msyql -p -uroot < db_name.sql

      由于设置了 lower_case_table_names,所有的数据库和表在重新创建之后在磁盘里的名字将全部为小写。

    示例如下:

    mysql> CREATE TABLE MyTABle (Name varchar(1), id int not null auto_increment , primary key (id) );
    Query OK, 0 rows affected (0.29 sec)

    mysql> show tables;
    +------------------+
    | Tables_in_sampdb |
    +------------------+
    | absence |
    | grade_event |
    | member |
    | mytable |
    | president |
    | score |
    | student |
    +------------------+
    7 rows in set (0.00 sec)

    mysql> desc mytable;
    +-------+------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+------------+------+-----+---------+----------------+
    | Name | varchar(1) | YES | | NULL | |
    | id | int(11) | NO | PRI | NULL | auto_increment |
    +-------+------------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)

    由上可见,使用 CREATE TABLE 命令创建了 MyTABle 表,但MySQL按照默认的 lower_case_table_names 设置,将表名存储为 'mytable'。并且由 'desc mytable' 命令可以看出,lower_case_table_names 并没有影响到 column_name,因为 mytable 表的Name列的列名依然为 Name

  • 相关阅读:
    java内部类
    navicat使用教程-PJ
    提交代码时的注意事项
    多线程技术
    Apache POI使用详解
    网站链接收藏夹
    MySQL优化
    Oracle创建用户、角色、授权、建表
    oracle 安装提示未找到文件安装
    Json对象与Json字符串的转化、JSON字符串与Java对象的转换
  • 原文地址:https://www.cnblogs.com/dongling/p/5708871.html
Copyright © 2011-2022 走看看