设为首页 收藏本站
查看: 1098|回复: 0

[经验分享] MySQL导数据问题

[复制链接]

尚未签到

发表于 2016-9-11 06:21:12 | 显示全部楼层 |阅读模式
  问题描述:工作中要部署一个linux+django+mysql+apache框架的后台网站测试环境,给业务测试人员使用
  
  环境工具:目标服务器工具(虚拟机centOS6.0,python2.6,MySQL5.1,django1.2.4,Apache2.2)
  目标服务器空间
  Filesystem                                 Type    Size   Used    Avail  Use%   Mounted on
/dev/mapper/VolGroup-lv_root   ext4     31G   18G    12G    66%     /
tmpfs                                          tmpfs   499M  0        499M   0%      /dev/shm
/dev/sda1                                   ext4     485M  30M    430M   7%     /boot
/dev/mapper/VolGroup-lv_home ext4    31G     144M  29G   2%     /home
  源服务器工具(Debian 6.0,python2.6,MySQL5.1,django1.2.4,Apache2.2)
  
  解决过程:1. 由于正式环境中的数据库有10多个库,800多张表,但是测试环境只用cada1,cada2两个库(200张表左右),django应用中首先要能检查到所有库和表的存在,因此要将无数据的数据库结构倒出来到目标MySQL服务器中
  使用

mysqldump -u root -p -d --add-drop-table -all-databases > /home/haokuan/datastruct.sql
  sql文件大小为4.34M,将结果在目标上source即可。
  
  2. 导出cada1库中所有表的具体数据
  使用

mysqldump -u root -p --add-drop-table cada1 > /home/haokuan/cada1.sql
  sql文件大小为1.5G左右;
  导出cada2库中80张表(大概占1/3,其余为备份表)的具体数据
  使用

mysqldump -u root -p --add-drop-table --exclude=cada2.table1 --exclude=cada2.table2 --exclude=cada2.table3 ... cada2 > /home/haokuan/cada2.sql
  sql文件大小为19G左右
  
  3. 在源服务器上,计算/var/lib/mysql/cada1,/var/lib/mysql/cada2的大小
  使用

du -sh /var/lib/mysql/cada1
du -sh /var/lib/mysql/cada2
  cada1文件夹下的*.frm,*.MYD,*.MYI文件接近2G,cada2文件夹大小接近21G
  
  4. 目标服务器的MySQL datapath=/var/lib/mysql,但是挂载在 / 的空间只剩下12G,空间不够,而挂载在/home的空间有29G,比较充足,但是通过scp命令将数据sql文件从源服务器放到目标服务器上面,也需要20G左右的空间,经过检查发现源服务器上挂载在 / 的空间,可以清理垃圾,
  使用tar命令将/目录下的一些数据文件压缩,rm -rf将垃圾清理掉,使用vi将my.cnf中的
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  改为
  datadir=/home/mysql
  socket=/home/mysql/mysql.sock
  使用mv将/var/lib/mysql下面的东西转移到/home/mysql
  使用scp haokuan@192.168.7.10:/home/haokuan/data.tar.gz /var/lib/mysql/
  
  5. 重启mysql,报错
  130729 13:34:15 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130729 13:34:15 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
130729 13:34:15 mysqld_safe mysqld from pid file /usr/local/mysql/var/mail.bmitwap.com.pid ended
130729 13:38:35 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
  datadir=/home/mysql
  转移sql datapath时候,造成文件缺失
  使用/usr/bin/mysql_install_db --user=mysql --datadir=/home/mysql重新生成相关文件
  使用/usr/bin/mysqld_safe --datadir=/home/mysql --socket=/home/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql 启动mysql 成功
  但是mysql命令连接服务器时候报错
  Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '
  在修改my.cnf时候,已经修改了socket路径,不知道为什么报错,但是可以使用
  ln -s /home/mysql/mysql.sock /var/lib/mysql/mysql.sock  做一个软链接
  
  6. 导入数据之前,想起头一次导入整个库的数据,应该注意字符集问题
  源服务器上
  mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name         | Value            |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
+----------------------+-----------------+

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name             | Value                       |
+--------------------------+----------------------------+
| character_set_client      | utf8                        |
| character_set_connection | utf8                        |
| character_set_database    | utf8                        |
| character_set_filesystem | binary                      |
| character_set_results     | utf8                        |
| character_set_server      | utf8                        |
| character_set_system      | utf8                        |
| character_sets_dir        | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
  
  目标服务器上
  mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name         | Value            |
+----------------------+-----------------+
| collation_connection | latin1_general_ci |
| collation_database    | latin1_general_ci |
| collation_server      | latin1_general_ci |
+----------------------+-----------------+

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name             | Value                       |
+--------------------------+----------------------------+
| character_set_client      | latin1                        |
| character_set_connection | latin1                        |
| character_set_database    | latin1                        |
| character_set_filesystem | binary                      |
| character_set_results     | latin1                        |
| character_set_server      | latin1                        |
| character_set_system      | latin1                        |
| character_sets_dir        | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
  源服务器的存储字符集和连接字符集都是utf8,目标服务器需要修改配置,修改my.cnf文件,
  [mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
user=mysql
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8
  --------------------------------------------------------------
  改为
  [mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
user=mysql
default-character-set=utf8
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8

[client]
default-character-set=utf8
  --------------------------------------------------------------
  其中default-character-set=utf8将character_set_server和character_set_system改为utf8,其余的是Mysql连接和查询字符集,由default-character-set=utf8决定,字符集改完了,使用screen做后台服务导数据
  
  7. 期间,由于空间不足问题,我新增了一块16G的硬盘,重启linux后,fdisk看到新增设备sdb
  使用mkfs -t ext4 /dev/sdb
  使用mount /dev/sdb /home/mysql
  使用df -lhT
Filesystem                                 Type    Size   Used  Avail  Use%   Mounted on
/dev/mapper/VolGroup-lv_root   ext4     31G   28G  1.3G   96%     /
tmpfs                                          tmpfs   499M  0      499M   0%      /dev/shm
/dev/sda1                                   ext4     485M  30M  430M   7%     /boot
/dev/mapper/VolGroup-lv_home ext4    31G   23G   6.7G    77%    /home
/dev/sdb                                      ext4     16G  172M   15G    2%     /home/mysql
  最后想起/home/mysql如果满了,也不会向上扩展使用父文件夹/home挂载的设备的空间,用不上,
  使用umount /dev/sdb卸载掉
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-270451-1-1.html 上篇帖子: rsyslog的mysql的helloworld 下篇帖子: 新装mysql不知道密码或者忘记mysql的密码的破解法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表