Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1255542
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2009-04-13 11:44:04

原来的数据使用的是MySQL4.1,大概有800M左右。使用 mysqldump -u username -p dbname > “filename”
导出的时候很容易死掉,而且数据也出现乱码。后来找到一个非常好用的工具-SQLyog,它里面有数据导入导出功能,而且效率非常的高(我800M的数据导出或导入都不到5分钟)。

下面来说说整个的过程:
1. 首先打开SQLyog,创建远程数据库连接。

2. 然后选择“Tools”-“Export Data As SQL Statements”,选择数据库和表以及保存的sql文件名,然后点击“Export”按钮。这样就将数据备份到了sql文件中。如果导入的话选择“Tools”-“Import From SQL Statements”,然后选择sql文件执行就可以了。

3. 如果是导入到本地的MySQL中的话只要断开远程数据库连接然后创建本地连接,接下来使用导入命令就可以了。

说明几点:
1. 导出的时候可以选择“只导出数据库结构”和“导出数据库结构和数据”,另外还有许多选项,比如是否自动创建新的数据库,是否删除存在的表等等,可以根据自己的需要选择。

2. 导入数据的时候可能会出现 Got a packet bigger than ‘max_allowed_packet’ bytes 的错误提示(在SQLyog的错误日志里面),这是因为MySQL默认的 max_allowed_packet 设置为 1M,增大这个参数就可以了,比如设置为8M。默认的my.ini文件中是没有这个参数的,可以自行添加。

3. SQLyog 的官方地址为:

4. 最后补充几点点有些题外的问题,一个是使用SQLlog直接查看数据的时候显示的是乱码,这个是没有关系的,仅仅是软件显示的时候编码不对而已,解决的方法跟MySQL-Front类似,具体看 MySQL-Front查看中文数据出现乱码的解决方法;另外一个就是使用SQLyog创建用户的时候如果使用PHP连接的时候会出现“Client does not support authentication protocol requested by server…”的提示,这是因为PHP连接数据库还是使用的MySQL4.1以前的方式,所以还需要执行下面的SQL脚本一下(这点跟在PHPMyAdmin中是类似的):

set password for username@localhost =old_password('yourPassword');
flush privileges;

 
 

MySQL服务器上添加一个允许远程访问的用户

MySQL默认是没有开启远程控制的,必须添加远程访问的用户,如果是安装版的话,从MySQL提供的控制台进入。

用root用户登陆,然后:

grant all privileges on *.* to 创建的用户名 @"%" identified by "密码";

flush privileges; * 刷新刚才的内容*

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";

@ 后面是访问mysql的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。

同时也可以为现有的用户设置是否具有远程访问权限。如下:

use mysql;

update db set host = '%' where user = '用户名'; (如果写成 host=localhost 那此用户就不具有远程访问权限)

FLUSH PRIVILEGES;

查看结果,执行:

use mysql;

select host,user,password from user;

-------------- -------- ---------------

| Host | User | Password |

-------------- -------- -----------------

| localhost | | | U 8RZq

| % | John | 123456 |

| localhost | root |

-------------- ------ -- ---------------

 

默认状况下,出于安全考虑,mysql数据库屏蔽了远程访问功能。 然而在许多状况下,你需要在家或者从web程序去访问远端数据库服务器,这就相当麻烦了。

第一步: 激活网络设置
你需要编辑mysql配置文件my.cnf.

通常状况,my.cnf放置于在以下目录:
/etc/mysql/my.cnf (Debian linux)
/etc/my.cnf (Red Hat Linux/Fedora Linux)
/var/db/mysql/my.cnf (FreeBSD)

# vi /etc/my.cnf
然后用vi编辑my.cnf,修改内容从以下行:

[mysqld]

你所需要:
1. 确保skip-networking被删除或者屏蔽,否则不支持TCP/IP 访问
2. 增加行bind-address = 65.55.55.2,替代65.55.55.2 为你的服务器地址
修改后,配置为:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = 65.55.55.2
# skip-networking
....
..

保存并关闭配置文件
重启mysql服务器:# /etc/init.d/mysql restart

第二步, 给远程ip授访问权限
1. 以root身份登陆mysql # mysql -u root -p
2. 授权给新数据库
如果你有一个新的数据库名称为foo。用户bar需要在客户端地址为202.54.10.20上访问。

在服务器端执行 (授权法):
mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

如何给以存在的数据库授权?

如果用户 webadmin 经常在客户端地址202.54.10.20 访问 webd数据库,那么在服务器端执行的命令应该为(改表法):

mysql> update db set Host='202.54.10.20' where Db='webdb';
mysql> update user set Host='202.54.10.20' where user='webadmin';

第三步: 执行exit命令退出mysql环境,

第四步 测试
From remote system type command:
$ mysql -u webadmin –h 65.55.55.2 –p

注解;
-u webadmin: webadmin为mysql的用户名
-h IP or 域名: 65.55.55.2 is MySQL server IP address or hostname (FQDN)
-p : 密码提示
你也可以使用telnet去连接远程的3306端口 $ telnet 65.55.55.2 3306

笔者注:

这篇文章解决了我在suse环境中的mysql远程访问问题。但是实际操作中,my.cnf似乎并不是特别重要。在我的操作中,my.cnf创建和修改没有执行(忽略第一步)。最重要的步骤应该是第四步
GRANT ALL ON b2c.* TO root@'5.179.201.86' IDENTIFIED BY '';
其中b2c为所要访问的远程数据库名,5.179.201.86为mysql客户端主机的ip地址,也就是你的机器ip地址。
有个小细节需要注意。如果你的服务器装了防火墙的话,需要打开3306的访问,否则也会连接不上。

阅读(2730) | 评论(0) | 转发(0) |
0

上一篇:setsockopt()用法

下一篇:ssh配置权威指南

给主人留下些什么吧!~~