码迷,mamicode.com
首页 > 其他好文 > 详细

主库修改lower_case_table_names导致从库中断

时间:2016-01-06 18:12:56      阅读:994      评论:0      收藏:0      [点我收藏+]

标签:lower_case_table_names

   今天软件商来部署应用,发现程序有问题,原因是他们给的数据库脚本中创建表的时候有大小写,但是程序里面读表的时候又没有严格的区分大小写,导致有些表找不到,因为Linux 的MySQL默认是区分大小写的,也就是lower_case_table_names=0,于是软件商要求我将该参数修改为lower_case_table_names=1,不然就只能回去修改程序了

   为了别人方便,我想改就改吧,应该没啥影响,lower_case_table_names=是静态参数,只能修改my.cnf,并且还需要重启数据库,结果修改的时候只是改了主库,没有改从库,导致从库应用数据的时候报错,不得不重做从库

   这里记录一下修改静态参数的顺序:如果是主从库环境的话,修改静态参数,静态参数指需要修改my.cnf配置文件的情况,应该先修改从库的配置文件,然后再修改主库的配置文件,等两边的参数一致了,再在主库上做其他的操作,这样从库应用就不会出错了


  参数说明:

 

mysql> show variables like ‘%lower%‘;

+------------------------+-------+

| Variable_name      | Value|

+------------------------+-------+

| lower_case_file_system | OFF|

| lower_case_table_names | 1  |

+------------------------+-------+

2 rows in set (0.00 sec)


 lower_case_file_system 表示数据目录所在的文件系统是否对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。


  lower_case_table_names

  0:区分大小写

  1:不区分大小写,其实是将程序发送的所有大写字符改成小写字符存储,适用于数据库名和表名


 说明:Windows系统对大小写不敏感,MySQL也默认设置为对大小写不敏感。Linux对大小写敏感,MySQL默认设置对大小写敏感。MySQL只是对库名、表名,变量名区分大小写,列名与列的别名在所有的情况下均是忽略大小写的



将大小写敏感转换为不敏感方法

    如果原来所建立库及表都是对大小写敏感的,想要转换为对大小写不敏感,主要需要进行如下3步:

    1.将数据库数据通过mysqldump导出。

    2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。

    3.将导出的数据导入mysql数据库。


需要注意的地方:

    1、为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母

    2、在任何系统中可以使用lower_case_tables_name=1。但使用该选项的不利之处是当使用show tables 或show databases 时,看不出表名是用大写还是小写。

    3、请注意在Linux中如果需要将lower_case_tables_name = 0,设置为lower_case_tables_name=1,再重启mysqld之前,必须先将旧的数据库名和表名转换为小写。否则之前大写的表会无法识别了


本文出自 “小鱼的博客” 博客,请务必保留此出处http://395469372.blog.51cto.com/1150982/1732165

主库修改lower_case_table_names导致从库中断

标签:lower_case_table_names

原文地址:http://395469372.blog.51cto.com/1150982/1732165

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!