MySQL新建数据库测试实践

客户出现bug需要修复,但是因为他们的一些个性化需求等原因,数据表结构跟现在的标准版的数据表结构不一样,为了免于跑现场调试代码,决定将现在的ksxing数据库表结构复制到新建数据库,做相应的表结构改动,与客户版本一致,这样就可以调试代码了。步骤如下:

  1. 创建和复制

    http://stackoverflow.com/questions/14107919/copy-database-structure-without-data-in-mysql-with-empty-tables

    http://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collation-to-utf-8

    如果我想把ksxing数据库的表结构复制到一个新的数据库cetc

    • 进入mysql shell,新建一个新的数据库cetc

      字符集默认可能是latin,我们创建时需指定utf8字符集

      mysql> CREATE DATABASE cetc CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      

      shell里输入show create database cetc就能看到字符集

      mysql> show create database cetc;
      CREATE DATABASE `cetc` /*!40100 DEFAULT CHARACTER SET latin1 */
      
    • 退出shell,输入下面的命令,即可实现

      mysqldump -u user -ppass -d olddb | mysql -u user -ppass -Dnewdb
      

      user即用户,-p+password, D+newdb

      在这里命令就应该是:

      mysqldump -u root -ppass -d ksxing | mysql -u root -ppass -Dcetc
      

      密码pass做相应替换

  2. 修改配置文件,将数据库文件名改成cetc

    运行app之后出现这样的问题:

     msg:Fatal: connect db fail: (1044, "Access denied for user 'root'@'10.163.8.90' to database 'cetc'")
    

    应该是数据权限的问题

    在数据库的shell里赋给此用户全部权限,命令如下:

     GRANT ALL PRIVILEGES ON cetc.* TO 'root'@'10.163.8.90' WITH GRANT OPTION;
    

    这样链接数据库就成功了

    参考地址:http://stackoverflow.com/questions/5016505/mysql-grant-all-privileges-on-database

  3. 数据表结构和内容复制

    • 数据表结构在不同数据库之间复制
      mysql> create table ksxing.shuffle_paper_test_ids like mfa.shuffle_paper_test_ids;
      
    • 不同数据库之间将一个表的数据全部复制到另一个数据库的一个表
      mysql> insert into ksxing_test.company_rights select * from ksxing.company_rights;