Chinaunix首页 | 论坛 | 博客
  • 博客访问: 171069
  • 博文数量: 65
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-16 08:59
文章分类

全部博文(65)

文章存档

2011年(3)

2010年(3)

2009年(43)

2008年(16)

我的朋友

分类: LINUX

2009-11-24 11:10:19

设置root口令
1    #/usr/bin/mysql/bin/mysqladmin -u root password 'new-password'
2    mysql> set password for root=password('qwer');
3    mysql> update user set password=password('qwer')
重新加载授权表:
   mysql> flush privileges;
 
 
重置root口令
##  $/usr/local/mysql/support-files/mysql.sever stop
使用--skip-grant-tables启动mysql

# safe_mysqld --skip-grant-tables --skip-networking 这样可以绕过授权表,作为mysql根用户登陆到服务器,不需要提供口令,额外的--skip-networking选项告诉MYSQL不要侦听tcp/ip连接
#use mysql;
#update user set password = password('new-passwd') where user = 'root';
 
mysql>flush privileges
 
数据库关闭:
1 service mysqld stop
  ./mysqld stop
2 mysqladmin shutdown

 
 
 
 
备份数据库和表

#mysqldump  database-name
 
使用示例:
# mysqldump mysql --user=root --password=root
 
这个过程将在屏幕上显示了示例数据库的整个内容.  如果备份的数据已经被破坏,最好的方法是在恢复之前执行,drop table 或drop database命令
如果只是备份数据库中的某些表
# mysqldump mysql db user --user=root --password=root 这个命令只是转存数据库mysql的db 和user表的内容.
 
如果需要同时备份一个以上的数据库,可以使用-B选项
#mysqldump -B db1 db2
 
希望使用相同的结构创建表,但是数据不同于前一个表, -d选项可以产生相同格式的表,但是内容是空的
#mysqldump -d mysql user > user.structure
如果只需要表的内容,例如把内容转储到一个不同的表上,可以再次使用mysqldump,但是选项是-t
#mysqldump -t mysql user --user=root --password=root > user.data
 
log-bin=mysql-bin

启用后你应该可以在 MySQL 的 Data Dir 里面发现如下的文件:

mysql-bin.index
mysql-bin.000001
mysql-bin.000002
...............
mysql-bin.00000X

MySQL 在以下几种情况会进行 lograrote:

  • 执行 Flush Logs 命令
  • MySQL Server 重新启动
  • 设置文件中有进行额外的设置

注:
请注意,当你使用 mysqldump 进行数据库备份时请记得加上 --flush-logs 选项,例如:

mysqldump --flush-logs -u root -p 数据库名称 > example.sql

这么做的目的是在备份时让 MySQL Server 进行 logrotate,这样子日后要辨别 "最后一次备份时间点" 之后的 Binary Log 会比较方便,因为若你没有主动(或通过设置)去删除 Binary Log,则只要你的硬盘空间够大,MySQL 会无限期的保存 Binary Log,也就是说你的 Binary Log 里面所记载的数据有可能包含 "最后一次备份时间点" 之前的数据。

使用 mysqlbinlog 将 Binary Log 转换成可执行的 SQL 命令

Binary Log 是无法被 MySQL Server 直接执行、也无法直接以人眼去阅读的,必须要先使用 MySQL 所提供的 mysqlbinlog 程式,将 Binary Log 转换为 MySQL Server 可以执行的 SQL 命令。mysqlbinlog 的语法如下:

mysqlbinlog -H --set-charset="utf8" --start-datatime="2007-01-01 00:00:00" --stop-datatime="2007-01-02 10:00:00" mysql-bin.[0-9]* > example.sql

-H:Display a hex dump of the log in comments.
--set-charset:设置编码
--start-datatime:要转换的开始时间点
--stop-datatime:要转换的结束时间点

mysql-bin.[0-9]*:这里要注意的是,要一次处理所有的 Binary Log,因为储存在 Binary Log 中的数据有可能会 "跨文件",例如从 mysql-bin.000001 的结尾接到 mysql-bin.000002 的开头。

example.sql:转换出来的文件名称,这个名称可以自已取。

需要加 -H 选项的原因如下:

mysqlbinlog didn't escape the string content of user variables, and did not deal well when these variables were in non-ASCII character sets; this is now fixed by always printing the string content of user variables in hexadecimal. The character set and collation of the string is now also printed. (Bug #3875)

三, 实际执行转换后的 Binary Log
很简单,只要一行简单的命令:

mysql < example.sql

如果没有什么错误讯息发生,那么只要等它执行完就大功告成了。话又说回来,要是执行失败呢?这是有可能的。MySQL 在处理 Binary Log 时有一些 Bug 存在,它的 Bug Report 似乎是说在最新版本的 MySQL Server 中已修正此 Bug,我没有实际测试过所以不清楚,但若是你和我一样也遇到这个 Bug 的话,也不用太担心。这些问题其实不难解决,自己 Workaround 即可。

目前看到的情况有:
Comment 没有正确标示
Comment 语法错误
不正确的使用 DELIMITER
奇怪的 STOP 命令(不太确定这是做什么用的)

自己用 sed 去修改转换过后的 example.sql 即可。

sed -f replace.rules example.sql > final.sql

replace.rules文件的内容:

s/\(Query.*thread\)/#\1/g
s/\(###.*###\)//g
s/DELIMITER ;//g
s/Stop//g

上面几行的意义:

s/\(Query.*thread\)/#\1/g

MySQL 的 Binary Log 在处理 Comment 的时候,有的时候会漏加 "#" 符号在 Comment Line 的最前面。
例如本来是:

Query thread_id=227528 exec_time=- error_code=0

要改成:

#Query thread_id=227528 exec_time=- error_code=0
s/\(###.*###\)//g

在某些 SQL statement(例如 REPLACE INTO search)的最后面会有一些 Comment 存在,但这些 Comment 的语法不正确反而会造成执行失败,故删除之。
类似以下的行都应该删除:

### Bitfield: user.options ###
### SAVE ORDERED IDS TO SEARCH CACHE ###

........等等

s/DELIMITER ;//g

删除不正确的 DELIMITER 命令,像以下这样就是不正确的:

DELIMITER ;
s/Stop//g

有的时候会在 Binary Log 中出现 Stop 这个命令而导致执行失败,故删除之。但我不太确定这个 Stop 命令实质上的用途是什么。

FAQ: 
1 mysql中怎么导出数据?? 
  用mysqldump呀
  举个例子:
  mysqldump -h host [--flush-logs] -u user -p pass --databases dbname>;file.dump
  就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中。
 导入: mysqldump (-h host) -u user -p pass dbname要先建库才行吧。
我试了不建的话提示:
[root@Mail root]# mysqldump -u root -ptest dump -- MySQL dump 8.22
--
-- Host: localhost    Database: dump
---------------------------------------------------------
-- Server version       3.23.54-log
mysqldump: Got error: 1049: Unknown database 'dump' when selecting the database

如果不想建库,可以这样msyql> source ./mysql.txt
 
  一台机器上安装多个MySQL的要点
shell>; ./configure --with-tcp-port=port_number \
--with-unix-socket=file_name \
--prefix=/usr/local/mysql-3.22.9



MySQL5.0的官方文档中介绍的在LINUX下安装多个MySQL的方法,是编译源码,在编译之前指定安装目录。MySQL二进制安装包解压后,其中的INSTALL-BINARY文档,也只是说明要安装在/usr/local下。因此一直以来的印像,MySQL二进制安装包只能安装在/usr/local下。
最近发现一位同事把二进制安装包安装在了/root下,而MySQL服务也可以正常使用。于是在自己的机器上试了一下,果然是可以安装在其他目录下的。我试的是MySQL5.0.30。
比如可以把它安装在某LINUX用户的HOME目录下,比如有个用户是test,它的HOME目录是/home/test。把二进制安装包解压在/home/test下。建一个符号链接/home/test/mysql指向解压出来的目录。INSTALL-BINARY中的步骤,只要运行mysql_install_db,但不需要加--user=mysql。注意不论解压还是执行上面的脚本,都不是以root身份运行的,是以test身份运行的。
安装完成以后,需要自己编辑一个my.cnf,其中必须要设置有如下几项:
[client]
socket=/home/test/mysql/mysql.sock

[mysqld]
socket=/home/test/mysql/mysql.sock
port=3308
basedir=/home/test/mysql
datadir=/home/test/mysql/data
把这个my.cnf可以放在/home/test/mysql下面
以test身份启动服务:
/home/test/mysql/bin/mysqld --defaults-file=/home/test/mysql/my.cnf &
这样mysqld会使用指定的这个配置文件,而不会去读取默认位置的配置文件,比如/etc/my.cnf。
上面的配置是使用了3308端口来为其他机器提供MYSQL服务,使用的unix socket,位置在/home/test/mysql/mysql.sock,也不会与该机器上的其他MYSQL服务冲突。
该机器上使用mysql客户端访问各个MYSQL服务,只需要指定不同的sokcet位置就行了,比如:
mysql --socket=/home/test/mysql/mysql.sock
或者
mysql --defaults-file=/home/test/mysql/mysql.cnf
如果需要从其他的机器,访问以上述方式建立的MYSQL服务,需要指定端口。比如:
mysql -h 172.20.10.10 --port=3308

以上述方法,可以在一台机器上装很多个MySQL。每个MYSQL占用一个端口、有各自的mysql.sock,每个MySQL可由一个单独的LINUX帐号来管理。这在开发或者测试环境中,可能是比较有价值的。

将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;
:导入.sql文件命令(例如D:/mysql.sql)
  mysql>use database;
  mysql>source d:/mysql.sql;
10:删除表
  mysql>drop TABLE MYTABLE;
11:清空表
  mysql>delete from MYTABLE;


阅读(1021) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~