编写背景:
最近这两周收到测试新人发来的邮件颇多;在众多邮件中,还频繁的有提醒更新简历的邮件,上周末抽空更新了一下,竟然有猎头找上门来,被吓了一跳。
测试环境迁移的工作已经过了60%,在迁移完毕后,在数据库上遇到了一些问题和现象;花费了不少时间,最终问题给解决了,非常有必要记录下来,因为
通过GOOGLE搜索来的信息,没有发现一个是有效指导如何解决问题的办法。自己必须要记录下来,万一那天要用,就不用搜索了。错误日志比Google宝贝是此次解
决mysql数据库中的问题得到的最大感想。
错误日志比GOOGLE宝贝!!!!
问题及现象1:
在home目录下安装了一个mysql,此mysql保存了一部分测试数据,现在需要把线上的测试数据导入到mysql数据库中,发现数据文件非常的大,
导入会占满空间,现在,需要把home目录下的mysql移动到一个大的目录文件home1,确保home空间可足够运行。
解决办法:
1、停止mysql服务,具体是:yinst stop mysql_server
2、把/home/y/share/mysql 目录文件拷贝到新的目录文件 /home1/y/share/mysql
3、把/home/y/logs/mysql 目录文件拷贝到新的目录文件/home1/y/logs/mysql
修改/home1/y/logs/ 中的mysql目录权限的拥有者是mysql,用户组是users,文件权限是775
修改命令是:sudo chown -R mysql mysql/ ;sudo chgrp -R users mysql/ ;sudo chmod 775 mysql/
4、把/home/y/var/mysql 目录文件拷贝到新的目录文件 /home1/y/var/mysql ,
修改/home1/y/var/ 中的mysql目录权限的拥有者是mysql,用户组是users,文件权限是775
修改命令是:sudo chown -R mysql mysql/ ;sudo chgrp -R users mysql/ ;sudo chmod 775 mysql/
5、把/home/y/conf/mysql 目录文件拷贝到新的目录文件 /home1/y/conf/mysql ,
修改/home1/y/conf/ 中的mysql目录权限的拥有者是mysql,用户组是mysql,文件权限是775
修改命令是:sudo chown -R mysql mysql/ ;sudo chgrp -R mysql mysql/ ;sudo chmod 775 mysql/
6、在home1目录下创建目录tmp,tmp目录文件操作权限是:777;sudo chmod 777 /home1/tmp
7、修改mysql的my.cnf配置文件,把文件中的home名改成home1
8、启动mysql服务,具体是:yinst start mysql_server
9、进入数据库,把大量的测试数据导入数据库中
问题及现象2:
在测试机器上,有一个mysql装在了home目录,另一个mysql被移动到home1,home的磁盘空间比较小,测试数据少,mysql数据主要用于功能测试;home1上的
磁盘空间比较大,测试数据大,mysql数据主要用于性能测试;问题:当作功能测试时,如何设置目前使用的数据库是home目录下的;当作性能测试时,如何设
置目前使用的数据库是home1目录下的。
解决办法:
1、复制home目录mysql的my.cnf文件,具体路径是:/etc/my.cnf,新命名为my_new.cnf文件
2、修改my_new.cnf文件中的信息,把文件中的home名改成home1,保存到目录文件:/home/y/etc/
3、当要用功能测试数据库时,停止mysql服务,执行命令:sudo ln -s /home/y/etc/my.cnf my.cnf;执行完毕,启动mysql服务
4、当要用性能测试数据库时,停止mysql服务,执行命令:sudo ln -s /home/y/etc/my_new.cnf my.cnf;执行完毕,启动mysql服务
备注和说明:
在处理上面的两个问题中,遇到了很多问题,其中就有一个:发现数据库服务启动不起来;mysql.sock文件找不到,这时可查看mysql的错误日志进行分析,比在
GOOGLE中输入“mysql.sock文件”的搜索结果看解决办法快,并且定位准确。通过错误日志分析,最后确定是把/home/y/var/mysql 目录文件拷贝到新的目录
文/home1/y/var/mysql 后,没有给目录文件授权为mysql,导致mysql服务启动时,无法初始化创建mysql.sock文件。
具体mysql的log日志文件地址,可以在my.cnf文件中查看到,常用的日志文件有:mysql.log、mysqld.err。
问题及现象3:
需要把mysql数据库中的某一张表导入到另一个数据库中
解决办法:
1、导出数据库表文件,具体操作命令:mysqldump -u root ncp2 alimama_member >/tmp/alimama_member.sql
2、导入数据库表文件,具体操作命令:mysql -uroot aliads<~/alimama_member.sql
最后总结:在日常所测试的软件,一定要打印错误日志,通过错误日志,可以分析程序是那个地方出了问题。在查找问题原因时,如果日志不管用,可以加调试信息
打印出来用于调试程序。这个也非常管用,我在大学编程时经常用这一办法。