标签 "MySQL" 下的文章

由于近期对博客数据的维护,但是博主飘云只需要导出wordpress的posts表内的部分字段,在百度搜索找遍了,都是用命令解决,但是本人对sql命令又不太懂,只好借助phpmyadmin工具来实现了!

操作方法:

一、首先访问phpmyadmin,找到要导出的数据库名称和表名称,如下图:
01

二、点击SQL,针对需要导出的字段名做数据查询,如下图:
例如:我们只需要导出部分字段,可以在SQL输入框内输入如下代码:

SELECT `ID`,`post_name`,`post_status`,`comment_status`,`post_type` FROM wp_posts

02点击执行!
075

导出查询结果后,把浏览器拉到底部,在:查询结果操作下面点击导出,这个时候导出的数据库文件sql,就只有包含上面查询到的数据!

这篇文章主要介绍了MariaDB my.cnf配置文件中文注释版,MariaDB是Mysql的一个分支,完全兼容Mysql,需要的朋友可以参考下

# /usr/share/mysql/my-huge.cnf
# MariaDB 配置文件 示例模板(huge,巨型).
#
# 本文件适用于专用数据库服务器, 内存为 1G-2G
# 机器上主要只运行 MariaDB的大型系统 ,
#
# MariaDB 程序会根据运行的操作系统平台查找一系列的配置文件,
# 你可以将此模板配置文件拷贝到对应的位置(并重命名),
# 要查看有哪些配置文件会被读取到,执行:
# 'my_print_defaults --help' 并查看
# Default options are read from the following files in the given order:
# (--> 程序会依次读取列出的配置文件.) 这部分下面列出的文件(路径)列表.
# 更多信息请参考: http://dev.mysql.com/doc/mysql/en/option-files.html
#
# 在本文件的各个小节中,你可以使用该程序支持的所有选项.
# 如果想要了解程序是否支持某个参数,
# 可以使用 "--help" 选项来启动该程序,查看帮助信息.

# 下面一小节的配置选项由本地的所有 MySQL 客户端读取,作为默认配置
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock

# 下面的各个小节,由各种应用程序来读取解析

# MySQL server 配置信息
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# 并发线程数,建议为CPU核心数乘以2: CPU's*2 for thread_concurrency
thread_concurrency = 8

# 可以指定一个专用磁盘的路径来作为临时目录,例如 SSD
#tmpdir = /tmp/

# 配置此参数则不启动 TCP/IP 端口 监听.
# 如果所有的处理程序都只在同一台机器上连接 mysqld, 这是一个很安全的做法,
# 所有同 mysqld 的交互只能通过Unix sockets 或命名管道(named pipes)完成.
# 注意,使用此选项而没有开启Windows上的命名管道(named pipes),
# (通过 "enable-named-pipe" 配置项) 将会导致 mysqld 不可用!
#skip-networking

# 主服务器配置选项 Replication Master Server (default)
# 在主从复制时,需要依赖二进制日志
log-bin=mysql-bin

# 在整个主从复制集群中要求是 1 到 2^32 - 1 之间的唯一ID, 否则或者失败,或者大量出错日志信息.
# 如果没有设置 master-host,则默认值是 1
# 但如果省略了,则(master)不生效
server-id = 1

# 从服务器配置选项 Replication Slave (需要将 master 部分注释掉,才能使用这部分)
#
# 要将服务器配置为从属服务器(replication slave),
# 有如下两种方案可供选择 :
#
# 1) 通过 CHANGE MASTER TO 命令 (在用户手册中有详细的描述) -
# 语法如下:
#
# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
# 你可以将 <host>, <user>, <password> 替换为单引号括起来的字符串,
# 将 <port> 替换为 master 的端口号 (默认是 3306).
#
# 一个示例如下所示:
#
# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
# MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# 或者:
#
# 2) 设置下面的参数. 然而, 一旦你选择了这种方式,
# 首次启动主从复制时 (即便启动复制失败, 如错误的 master-password 密码,
# 导致 slave 连接不上等), slave 将会创建一个名为 master.info 的文件,
# 如果以后再修改本配置文件(xxx.cnf)中下面的这些参数, 则将被忽略,
# 并继续使用 master.info 文件的内容,
# 除非关闭 slave 服务器, 然后删除文件 master.info 并重新启动 slaver server.
# 出于这个原因, 你应该不系统修改下面的相关参数参数(带 <> 的注释部分),
# 而是使用 CHANGE MASTER TO (上面的方案1)
#
#
# 在整个主从复制集群中要求是 2 到 2^32 - 1 之间的唯一ID,
# 否则或者失败,或者大量出错日志信息.
# 如果设置了 master-host,则默认值是 2
# 但如果省略了,则不会成为 slave
#server-id = 2
#
# 此slave 需要连接的 master. - required
#master-host = <hostname>
#
# slave连接到 master 认证时需要的 username
# - 用户名是必须的(也可以在连接时指定)
#master-user = <username>
#
# slave连接到 master 认证时需要的 password
# - 密码是必须的(也可以在连接时指定)
#master-password = <password>
#
# master 监听的端口号
# 可选 - 默认是 3306
#master-port = <port>
#
# 开启二进制日志, 对于slave从服务器不是必须的,但推荐开启
#log-bin=mysql-bin
#
# 二进制日志格式 —— 推荐 mixed
#binlog_format=mixed

# 如果只使用 InnoDB 表, 请取消下列选项的注释
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# 如果只使用 InnoDB,可以设置 .._buffer_pool_size 为物理内存的 50 - 80 %
# 谨防内存使用设置得太高
#innodb_buffer_pool_size = 384M
# 附加缓存池大小
#innodb_additional_mem_pool_size = 20M
# 设置 .._log_file_size 为 buffer pool size 的 25 % 左右
#innodb_log_file_size = 100M
# 日志缓存的大小,不要设置太大,1秒钟刷新一次
#innodb_log_buffer_size = 8M
# 默认1,事务提交就刷新日志到硬盘;
# 设为2,刷新到操作系统缓存,但性能提高很多,设为 0 则可能丢事务.
#innodb_flush_log_at_trx_commit = 1
# 表死锁的超时释放时间,单位秒
#innodb_lock_wait_timeout = 50

[mysqldump]
# 快速导出到输出流/硬盘,不在内存中缓存
quick
# 最大数据包限制
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# 如果对 SQL不熟悉,可以将下面的注释符去掉,拒绝无where的不安全操作.
#safe-updates

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

今天飘云有在帮一个网友搬家网站过程中,习惯导出MySQL数据库的时候采用mysqldump命令,但是意外发生了出现"Warning: Using a password on the command line interface can be insecure."的错误提示,当然数据库肯定也没有能备份下来。这个问题应该是在MySQL5.6+版本的时候就有出现,可能是为了确保数据库的安全性采用的保护机制。

遇到问题那就去解决问题,大概搜索到国内的一些网站,大部分都是复制的,也没有讲的明白,于是还是找老外的信息,于是飘云就整理到下面比较全的方法且经过验证是没有问题的。

第一种方法、修改数据库配置文件

1、我们需要修改数据库配置文件,这个要看我们数据库的配置的,有些是在/etc/my.cnf,有些是/etc/my.conf、my.ini

Warning: Using a password on the command line interface can be insecure.

我们需要在[mysqldump]部分添加脚本:(注:添加在[mysqldump]字段下面,安全性比较好一点,网上的有些是添加到:[client] 字段下面也可以)
mysql56-waring

host=localhost
user=数据库用户piaoyun
password='数据库密码piaoyuncc'

这里参数要修改成我们自己的。

2、采用命令导出和导入数据库

其实在这个时候,我们如果采用"详解使用mysqldump命令备份还原MySQL数据用法整理"介绍的方法也是可以使用的,虽然依旧有错误提示,但是数据库还是可以导出的。您肯定和飘云一样是追求细节的人,一点点问题都不能有,但我们可以用下面的命令导出和导入,就没有错误提示。

#导出数据库

"D:\xampps\mysql\bin\mysqldump.exe" --defaults-extra-file=D:\xampps\mysql\bin\my.ini--default-character-set=utf8 --databases piaoyuncc>E:\SQL\piaoyuncc.sql

#导入数据库

"D:\xampps\mysql\bin\mysqldump.exe" --defaults-extra-file=D:\xampps\mysql\bin\my.ini--default-character-set=utf8 --databases piaoyuncc < E:\SQL\piaoyuncc.sql

这里我们可以看到上面的命令和以前常用的快速导入和导入命令有所不同了,需要加载我们配置的MYSQL配置文件,这个红色部分要根据我们实际的路径修改。用这样的命令导出备份和导入是没有错误提示的。

第二种方法、利用mysql_config_editor

1、设置加密模式

mysql_config_editor set --login-path=local --host=localhost --user=db_user --password

红色部分是需要修改成我们自己数据库用户名的,回车之后会提示我们输入数据库密码,我们照样输入。

2、执行备份

mysqldump -u db_user -pInsecurePassword my_database | gzip > piaoyun.tar.gz

根据我们数据信息修改用户和用户名和数据库密码,执行备份,这里飘云测试还是有错误提示,但数据库是可以备份的。

总之,我们只要实现结果,可以选择以上2种方法其一操作,当然博主飘云也有看到其他的方法,这里就不多分享了,如果有兴趣的可以搜索其他解决方法。

需求:
有一台windows服务器上跑着mysql的一些应用,现在需要将mysql的数据每天备份,并通过ftp上传到指定的存储服务器上
要是在linux上,shell 脚本很容易就搞定了,在windows上习惯了点鼠标,哪里来的脚本,一时还真不知道该怎么弄.baidu,google得知可以通过批处理或者vbs脚本实现.
批处理是比较简单的,毕竟dos的常用命令还是知道的

我的服务器为Win2008,项目的数据库引擎采用的是MyIsam,数量大并不大,运营到现在3个月,数据库大小160M。为了防止出现意外,数据库每天都需要备份,当然,如果每天手工备份,那就要把人烦死。所以我就写了下面的批处理文件,通过Win2008系统的计划任务,在凌晨2点开始执行批处理,备份数据库。批处理中我采用了两种方法,一种是通过mysqldump命令备份,并通过gzip压缩数据。另一种是备份物理文件,通过调用rar命令压缩数据。至今,这个数据库备份批处理文件运行近1个月,目前看来效果符合预期。

解决思路:
使用批处理文件,实现备份和上传的功能
将批处理文件加到计划任务中实现每日定时执行脚本
完整的批处理文件如下 文件名dbbk.bat

@echo off
:: this batch is to backup the db files on windows to linux server
:: created by yahoon
:: 2008.4.9

::backup the mysql db
mysqldump -uroot –pxxxx demo>c:\demo %date:~0,10%.sql

::pause
:: wait press any key to continue
:: ready to delete

::form the ftp command file
echo open 服务器ip>c:\ftpdemo.txt
echo ftp用户名>>c:\ftpdemo.txt
echo ftp密码>>c:\ftpdemo.txt
echo put c:\ demo %date:~0,10%.sql >>c:\ftpdemo.txt
echo bye>>c:\ftpdemo.txt

::transfer the file to server via ftp
ftp -i -s:c:\ftpdemo.txt

::pause

::clean the tmp files
del c:\ftpdemo.txt
del c:\ demo %date:~0,10%.sql

说明:
1. 双冒号::后面的内容为注释,不会执行
2. 两处pause语句是调试的时候用的,运行pause的结果是屏幕上显示”按任意键继续”,脚本等着用户按键才会往下执行
3. demo %date:~0,10%.sql 是备份的文件名,最后的结果是demo20080409.sql ,其中%date:~0,10%表示的是date命令输出的字符串中从第0个开始的10个字符.这点很重要,因为我在英文的OS上,执行这个脚本在备份的时候报文件名错误.这是因为当你执行date命令的时候结果是
Tue 04/08/2008
要达到demo20080409.sql这样的效果文件名就要这么写demo%date:~10,4%%date:~4,2%%date:~7,2%.sql
最后提一下写的过程中解决的一个问题
由于脚本的思路是做备份,然后通过ftp上传
所以最开始写的时候没有::form the ftp command file 这一段.而是写好一个ftpdemo.txt放在那
这就出现了一个问题,由于生成的sql文件名每天都变,这样ftp命令也得改.写死的ftpdemo.txt文件肯定就实现不了.
想出了个笨主意是批处理文件里面生成的sql文件就定义死文件名为demo.sql,这样ftpdemo.txt文件也可以写死.然后等上传以后,再通过linux的脚本通过crontab来每天改名.

下面先看一下备份mySQL数据库的批处理代码:

    @ECHO OFF  
    set path=%SystemRoot%\system32;D:\PHP\MySql\MySQL Server 5.1\bin;C:\Program Files\WinRAR  
    set mktime=%date:~0,10%  
      
    ::设置数据库名称(两个数据库,则下面的for中的tokens值为1,2。如果有三个数据库,则tokens值为:1,2,3。数据库依次为%%a,%%b,%%c....按英文字母顺序排列)  
    ::这里备份三个数据库:DB_A、DB_B、DB_C,数据库间用半角逗号分隔  
    SET dbname=DB_A,DB_B,DB_C  
      
    ::数据库管理员权限及密码  
    SET dbuser=root  
    SET dbpasswd=123456  
      
    ::mySQL所在目录  
    SET mysqldir=D:\PHP\MySql\MySQL Server 5.1  
      
    ::备份gz文件所在目录  
    SET gz_backupdir=D:\mySQL_data_bak\sql_gz_bak  
    if not exist %gz_backupdir% md %gz_backupdir%  
      
    ::备份file文件所在目录  
    SET file_backupdir=D:\mySQL_data_bak\file_bak  
    if not exist %file_backupdir% md %file_backupdir%  
      
    ::::停止WWW网页WEB服务::::或者停止Apache2 命令:net stop Apache2  
    net stop w3svc  
      
    ::::延时15秒  
    ping -n 15 127.0.1>nul  
      
    ::::开始备份mySQL数据库::::  
    @ECHO Beginning backup of %dbname%...  
    for /f "tokens=1,2,3 delims=," %%a in ("%dbname%") do (  
      if not exist %gz_backupdir%\%%a md %gz_backupdir%\%%a  
      if not exist %gz_backupdir%\%%b md %gz_backupdir%\%%b  
      if not exist %gz_backupdir%\%%c md %gz_backupdir%\%%c  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%a | gzip > %gz_backupdir%\%%a\%mktime%.sql.gz  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%b | gzip > %gz_backupdir%\%%b\%mktime%.sql.gz  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%c | gzip > %gz_backupdir%\%%c\%mktime%.sql.gz  
    )  
      
    ::停止mySQL服务,以便拷备文件  
    net stop MySQL  
      
    ::延时10秒  
    ping -n 10 127.0.1>nul  
      
    ::开始将要备份的文件打包到仓库  
    d:  
    cd "%mysqldir%\data"  
    for /f "tokens=1,2,3 delims=," %%a in ("%dbname%") do (  
      if not exist %file_backupdir%\%%a md %file_backupdir%\%%a  
      if not exist %file_backupdir%\%%b md %file_backupdir%\%%b  
      if not exist %file_backupdir%\%%c md %file_backupdir%\%%c  
      @rar a %file_backupdir%\%%a\%mktime%.rar %%a  
      @rar a %file_backupdir%\%%b\%mktime%.rar %%b  
      @rar a %file_backupdir%\%%c\%mktime%.rar %%c  
    )  
      
    ::::启动MySQL::::  
    net start MySQL  
      
    ::::启动IIS::::如果WEB服务器是Apache,则去掉下面一行,使用: net start Apache2  
    net start w3svc  
      
    exit

对于上面的内容,做以下几点补充说明

1、由于采用两种方式备份,为了不混淆,所以以mysqldump方式备份的,由于通过gzip压缩,所以后缀名为.gz,这种文件我保存在D:\mySQL_data_bak目录下的sql_gz_bak目录下。以物理备份文件方式的,由于通过rar压缩,后缀名为.rar,这种文件我保存在D:\mySQL_data_bak目录下的file_bak目录下。备份的文件名是变量mktime决定的,mktime=%date:~0,10%,意思是把当前时间从位置0开始,截取10个字符,那么%data%为:2012-08-31 星期五 取得的结果就为:2012-08-31

2、设置备份数据库名称。上面的例子中备份了三个数据库。分别为DB_A、DB_B、DB_C,这个根据你实际情况备份你需要的数据库了。这里要注意的是,由于这在里统一配置要配备的数据库,那么在下面要通过批处理的for命令来遍历,依次读取需要备份的数据库名称。所以,如果你备份的数据库恰好不是3个,那么你要改动上面的代码。

备份一个数据库的情况:

    省略...  
    SET dbname=DB_A  
    省略...  
    ::::开始备份mySQL数据库::::  
    @ECHO Beginning backup of %dbname%...  
    for /f "tokens=1 delims=," %%a in ("%dbname%") do (  
      if not exist %gz_backupdir%\%%a md %gz_backupdir%\%%a  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%a | gzip > %gz_backupdir%\%%a\%mktime%.sql.gz  
    )  
    省略...  
    for /f "tokens=1 delims=," %%a in ("%dbname%") do (  
      if not exist %file_backupdir%\%%a md %file_backupdir%\%%a  
      @rar a %file_backupdir%\%%a\%mktime%.rar %%a  
    )  
    省略...

备份两个数据库的情况:

    省略...  
    SET dbname=DB_A,DB_B  
    省略...  
    ::::开始备份mySQL数据库::::  
    @ECHO Beginning backup of %dbname%...  
    for /f "tokens=1,2 delims=," %%a in ("%dbname%") do (  
      if not exist %gz_backupdir%\%%a md %gz_backupdir%\%%a  
      if not exist %gz_backupdir%\%%b md %gz_backupdir%\%%b  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%a | gzip > %gz_backupdir%\%%a\%mktime%.sql.gz  
      "%mysqldir%\bin\mysqldump" -u %dbuser% -p%dbpasswd% --default-character-set=utf8 --opt %%b | gzip > %gz_backupdir%\%%b\%mktime%.sql.gz  
    )  
    省略...  
    for /f "tokens=1,2 delims=," %%a in ("%dbname%") do (  
      if not exist %file_backupdir%\%%a md %file_backupdir%\%%a  
      if not exist %file_backupdir%\%%b md %file_backupdir%\%%b  
      @rar a %file_backupdir%\%%a\%mktime%.rar %%a  
      @rar a %file_backupdir%\%%b\%mktime%.rar %%b  
    )  
    省略...

3、在备份数据库前停止WEB服务,是为了确保备份数据库的一致性。
4、其它参数配置,根据实际情况改动。
5、通过gzip压缩,需要将gzip.exe放到mySQL目录下的bin目录中。

还原数据库

由于备份时采用两种方式备份数据库,所以还原数据库时,应用两种方法分开还原。所以还原数据库的批处理命令为两个批处理文件。

通过SQL文件(GZ)还原.bat

    @ECHO OFF  
    ::更改数据库名称  
    SET dbname=DB_A  
      
    ::更改欲还原的数据库备份文件  
    SET filename=xxxx-xx-xx.sql.gz  
      
    set path=%SystemRoot%\system32;D:\PHP\MySql\MySQL Server 5.1\bin  
      
    ::::停止WWW网页WEB服务::::或者停止Apache2 命令:net stop Apache2  
    net stop w3svc  
      
    ::::延时15秒  
    ping -n 15 127.0.1>nul  
      
    ::数据库管理员权限及密码  
    SET dbuser=root  
    SET dbpasswd=123456  
      
    ::要还原的gzip文件路径  
    SET filename=D:\mySQL_data_bak\sql_gz_bak\%dbname%\%filename%  
      
    @ECHO Beginning restore of %dbname%...  
    gunzip < %filename% | mysql -u %dbuser% -p%dbpasswd% %dbname%  
      
    ::::启动IIS::::如果WEB服务器是Apache,则去掉下面一行,使用: net start Apache2  
    net start w3svc

通过备份文件(RAR)还原.bat

    @ECHO OFF  
    set path=%SystemRoot%\system32;D:\PHP\MySql\MySQL Server 5.1\bin;C:\Program Files\WinRAR  
    set mktime=%date:~0,10%  
      
    ::设置数据库名称  
    SET dbname=DB_A  
      
    ::设置欲还原的压缩文件包文件名  
    SET filename=xxxx-xx-xx.rar  
      
    ::mySQL所在目录  
    SET mysqldir=D:\PHP\MySql\MySQL Server 5.1  
      
    ::备份的file文件所在目录  
    SET file_backupdir=D:\mySQL_data_bak\file_bak\%dbname%  
      
    if not exist "%mysqldir%\data\%dbname%" md "%mysqldir%\data\%dbname%"  
      
    ::::停止WWW网页WEB服务::::或者停止Apache2 命令:net stop Apache2  
    net stop w3svc  
      
    ::::延时15秒  
    ping -n 15 127.0.1>nul  
      
    ::停止mySQL服务,以便拷备文件  
    net stop MySQL  
      
    ::延时10秒  
    ping -n 10 127.0.1>nul  
      
    ::开始将要备份的文件打包到仓库  
    cd /d "%mysqldir%\data"  
    :: e表示解压 -o+ 表示替换原有文件  
    rar e -o+ %file_backupdir%\%filename% "%mysqldir%\data\%dbname%"  
      
    ::::启动MySQL::::  
    net start MySQL  
      
    ::::启动IIS::::如果WEB服务器是Apache,则去掉下面一行,使用: net start Apache2  
    net start w3svc  
    exit  

 

@echo on 

REM------------------------backup bugdb which is InnoDB-----------------------------   
del C:/backup/website/bugdb_*.sql   
cd F:/usr/wamp/mysql/bin   
set year=%date:~0,4%   
set month=%date:~5,2%   
set day=%date:~8,2%   
set filename=piaoyun_%year%%month%%day%.sql   
mysqldump.exe piaoyun -uroot -p123456 > F:/backup/piaoyun.cc/%filename%   
@echo off

mysqldump命令用法

MySQL数据库的备份工具有很多,不过这里介绍的是一个小巧好用的mysqldump工具,位于数据库目录下bin/mysqldump.exe.这几天用phpMyAdmin备份数据库的时候出现乱码,反复在本地跟远程的Dreamhost空间上测试了数据库,但是还是导出数据库会出现乱码,应该是phpMyAdmin出现的问题,数据库本身没有问题.扯远咯,呵呵.我Google到的关于mysqldump工具的相关用法.
如果主机主机支持 Shell 的话,可以 SSH 登陆主机,执行如下的命令实现备份与恢复,适合在Dreamhost,Bluehost等空间上.

导出数据库:
mysqldump -h HOSTNAME -uUSERNAME -p DBNAME > exported_db.sql

导入数据库:
mysql -h HOSTNAME -uUSERNAME -p DBNAME < exported_db.sql

HOSTNAME 是数据库主机名,USERNAME 和 DBNAME 分别是登陆 ID 和数据库名,导出的数据库存放在 exported_db.sql 文件里。 巧克力工厂(Beta5):Wordpress 超大数据库的导入.

使用mysqldump:
(mysqldump命令位于mysql/bin/目录中) //要专到mysql/bin/目录中才能使用,直接cmd运行命令窗口使用不了,专到数据库所在的mysql/bin/目录中使用.

基本用法是: shell> mysqldump [OPTIONS] database [tables]

如果你不给定任何表,整个数据库将被导出。

通过执行mysqldump –help,你能得到你mysqldump的版本支持的选项表。

注意,如果你运行mysqldump没有–quick或–opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。

几个常用用例:

1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p dataname >dataname.sql
这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中.

2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p dataname users> dataname_users.sql

3.导出一个数据库结构
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:/wcnc_db.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/wcnc_db.sql

mysqldump支持下列选项:
–add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。

–add-drop-table
在每个create语句之前增加一个drop table。

–allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。

-c, –complete-insert
使用完整的insert语句(用列名字)。

-C, –compress
如果客户和服务器均支持压缩,压缩两者间所有的信息。

–delayed
用INSERT DELAYED命令插入行。

-e, –extended-insert
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)

-#, –debug[=option_string]
跟踪程序的使用(为了调试)。

–help
显示一条帮助消息并且退出。

–fields-terminated-by=…

–fields-enclosed-by=…

–fields-optionally-enclosed-by=…

–fields-escaped-by=…

–fields-terminated-by=…

这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。
LOAD DATA INFILE语法。

-F, –flush-logs
在开始导出前,洗掉在MySQL服务器中的日志文件。

-f, –force,
即使我们在一个表导出期间得到一个SQL错误,继续。

-h, –host=..
从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。

-l, –lock-tables.
为开始导出锁定所有表。

-t, –no-create-info
不写入表创建信息(CREATE TABLE语句)

-d, –no-data
不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的!

–opt
同–quick –add-drop-table –add-locks –extended-insert –lock-tables。
应该给你为读入一个MySQL服务器的尽可能最快的导出。

-pyour_pass, –password[=your_pass]
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。

-P port_num, –port=port_num
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)

-q, –quick
不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。

-S /path/to/socket, –socket=/path/to/socket
与localhost连接时(它是缺省主机)使用的套接字文件。

-T, –tab=path-to-some-directory
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据–fields-xxx和 –lines–xxx选项来定。

-u user_name, –user=user_name
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。

-O var=option, –set-variable var=option
设置一个变量的值。可能的变量被列在下面。

-v, –verbose
冗长模式。打印出程序所做的更多的信息。

-V, –version
打印版本信息并且退出。

-w, –where=’where-condition’
只导出被选择了的记录;注意引号是强制的!
“–where=user=’jimf’” “-wuserid>1″ “-wuserid<1″

最常见的mysqldump使用可能制作整个数据库的一个备份:
mysqldump –opt database > backup-file.sql

但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的:
mysqldump –opt database | mysql –host=remote-host -C database
由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了:

shell> mysqladmin create target_db_name
shell> mysql target_db_name < backup-file.sql
就是
shell> mysql 库名 < 文件名

电影《社交网络》中,facebook创始人马克.扎克失恋后入侵哈佛大学宿舍楼服务器,窃取数据库资料,并在两个小时内完成了一个给校内女生评分的交互网站,该网站一天内点击数过10W,直接导致学校服务器崩溃。。。。。。
其实,构建那样一个网站并不需要很多高深的技术,任何一个有一定网络编程基础的人都可以做到。马克构建网站所用的是Apache服务器和PHP服务器脚本语言,我曾经用三天时间学习PHP,然后用了两个星期为学校写了一个网站,可见PHP是很简单的,而facebook后台也是用php写的,当然,大家现在看到的我的wordpress博客后台也是php~~。

话说回来,很多人可能已经用上ubuntu了,大家可能花了大量时间在ubuntu的美化上,这无可厚非,但是,ubuntu应该给我们的工作和学习带来更多的便利和方便。ubuntu作为linux,为我们提供了强大的网络方面的功能,其中的服务器技术尤其强大,安全。如果不学习linux的网络技术,很难说自己掌握了linux。

今天,我在ubuntu下配置了一个Apache服务器。通过Apache我们可以学习php网络编程,可以用它来部署自己本地的wordpress博客,从而进一步通过网络和朋友交流。从此,你将深刻体会到网络带个我们的神奇力量,至少我是这样觉得的~~

步骤一、安装apache2

sudo apt-get install apache2

安装完成。

运行如下命令重启下:

sudo /etc/init.d/apache2 restart

在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了It works!,那就说明Apache就成功的安装了,Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了,所有要能过浏览器访问的Web文件都要放到这个目录里。

步骤二、安装php

sudo apt-get install libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt

此外,建议安装扩展php5-gd php5-mysql,安装方式同上.

安装完后,我们要重新启动Apache,让它加载PHP模块:

sudo /etc/init.d/apache2 restart

接下来,我们就在Web目录下面新建一个test.php文件来测试PHP是否能正常的运行,命令:

sudo gedit /var/www/test.php

然后输入:

<?php
echo phpinfo();
?>

接着保存文件,在浏览器里输入http://127.0.0.1/test.php,如果在网页中显示hello,world!!,那就说明PHP已经正常运行了。

步骤三、安装mysql数据库:

sudo apt-get install mysql-server mysql-client

apt-get程序会自动下载安装最新的mysql版本。在安装的最后,它会要求里输入root的密码,注意,这里的root密码可不是Ubuntu的root密码啊,是你要给MySQL设定的root密码。

步骤四、安装phpmyadmin-Mysql数据库管理

sudo apt-get install phpmyadmin

phpmyadmin设置:

在安装过程中会要求选择Web server:apache2或lighttpd,使用空格键选定apache2,按tab键然后确定。然后会要求输入设置的Mysql数据库密码连接密码Password of the database’s administrative user。

然后将phpmyadmin与apache2建立连接,以我的为例:www目录在/var/www,phpmyadmin在/usr/share /phpmyadmin目录,所以就用命令:

sudo ln -s /usr/share/phpmyadmin /var/www

建立链接。

phpmyadmin测试:在浏览器地址栏中打开http://localhost/phpmyadmin。

以上ALMP的基本组件就安装完毕了,下面我们再来看一些其他的设置:

步骤五、设置Ubuntu文件执行读写权限

LAMP组建安装好之后,PHP网络服务器根目录默认设置是在:/var/www。由于Linux系统的安全性原则,改目录下的文件读写权限是只允许root用户操作的,所以我们不能在www文件夹中新建php文件,也不能修改和删除,必须要先修改/var/www目录的读写权限。在界面管理器中通过右键属性不能修改文件权限,得执行root终端命令:

sudo chmod 777 /var/www

然后就可以写入html或php文件了。777是linux中的最高权限,表示可读,可写,可执行。

sudo apt-get install apache2 libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt mysql-server mysql-client phpmyadmin

今天在linux服务器上安装配置完vsftpd之后,ftp根目录指定到网站根目录/var/www/,权限给以777,之后再次访问http://piaoyun.cc/phpMyAdmin,无法打开phpMyAdmin出现这样的提示:
Wrong permissions on configuration file, should not be world writable!

查资料一看,原来phpMyAdmin要在755权限下才能正常访问(777权限不可以正常访问)。

解决办法:

登陆SSH,这里博主推荐Xshell来登陆!xshell的使用技巧收集[不断更新中]
#cd /var/www/
#chmod -R 755 phpMyAdmin

Linux目录权限:
Linux系统中的每个文件和目录都有访问许可权限,用他来确定谁能通过何种方式对文件和目录进行访问和操作。 文件或目录的访问权限分为只读,只写和可执行三种。
有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者能允许同组用户有权访问文件,还能将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。

读取-r 写入-w 执行-x
-rw------------- (600) — 只有所有者才有读取和写入的权限;
-rw--r------r--- (644) — 只有所有者才有读取和写入的权限;组群和其他人只有读取的权限;
-rwx------------ (700) — 只有所有者才有读取,写入,和执行的权限;
-rwx-rx----rx-- (755) — 所有者有读取,写入,和执行的权限;组群和其他人只有读取和执行的权限;
-rwx-x-----x--- (711) — 所有者有读取,写入,和执行权限,组群和其他人只有执行权限;
-rw--rw---rw-- (666) — 每个人都能够读取和写入文件;[请谨慎使用这些权限]
-rwx-rwx-rwx- (777) — 每个人都能够读取,写入,和执行.[这种权限设置可能会很危险]

终端下可以登录mysql,但是用phpmyadmin无法登录提示:#2002 无法登录 MySQL 服务器
20131102152214_01

解决方法如下:
修改config.inc.php文件,将config.inc.php 中

$cfg['Servers'][$i]['host'] = 'localhost';

改成:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

如果修改过端口,记得也要修改端口号!

$cfg['Servers'][$i]['host'] = '127.0.0.1:3312';

还要添加:

$cfg['Servers'][$i]['hide_db'] = ‘information_schema’;//使用登陆后看不见information_schema数据库,隐藏数据库!

如果要隐藏多个可以用"|"来隔开其他数据库名,例如:

$cfg['Servers'][$i]['hide_db'] = '(information_schema|phpmyadmin|mysql)'

只是为了安全的目的隐藏起来。

如果想要隐藏全部以a开头的数据库,可以使用'^a'

于是把配置文件里的host改成127.0.0.1,再连接,好了,连接正常。
($cfg['Servers'][$i]['hide_db'] = ‘information_schema’;这一句加不加都无所谓,不影响连接数据库)

为什么在linux下localhost就是不能连接呢?查mysql官方文档[参看这里],看到有这样的句话:
如果未指定指定主机名或指定了特殊的主机名localhost,将使用Unix套接字。
Unix套接字默认为/tmp/mysql.sock,而本机并没有配置这样的套接字文件,所以自然是连接失败了。
官方文档确实非常重要,比网上的一般的解决方法都更权威有效得多。

PS:新版本的PhpMyAdmin 增强了安全性,需要在配置文件设置一个短语密码。否则进入之后会有“配置文件现在需要一个短语密码。”的红色警叹提示。

解决方法:编辑config.inc.php

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = 'abcde';(其中的"abcde"自定义)

这个密码用于Cookies的加密,以免多个PhpMyAdmin或者和其他程序共用Cookies时搞混。

最近一次在用phpmyadmin导入mysql数据库时,偶的15M的数据库不能导入,mysql数据库最大只能导入2M..

phpmyadmin数据库导入出错:
You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.

可以修改导入数据库文件最大限制吗?
到网上搜索了一下前人的解决办法,大多数都说修改php.ini中的upload_max_filesize,但修改了这个以后,还是提示这个问题;但 phpmyadmin在提示这个问题的时候,右下角有一行英文提示,大致意思是说,解决这个问题,可以参考phpmyadmin文档;直接点击这个链 接,phpmyadmin自动查找到了以下说明:
[1.16] I cannot upload big dump files (memory, http or timeout problems).
Starting with version 2.7.0, the import engine has been re–written and these problems should not occur. If possible, upgrade your phpMyAdmin to the latest version to take advantage of the new import features.

The first things to check (or ask your host provider to check) are the values of upload_max_filesize, memory_limit and post_max_size in the php.ini configuration file. All of these three settings limit the maximum size of data that can be submitted and handled by PHP. One user also said that post_max_size and memory_limit need to be larger than upload_max_filesize.

以上文件大致说明的意思就是说,遇到导入过大文件时,首先检查php.ini 配置文件中的以下三个地方,upload_max_filesize, memory_limit 和post_max_size,并且推荐修改的值要稍大于导入的巨大sql数据库文件;依照这个提示,我修改了以上三个在php.ini中的值以后,重启 了php环境,再次导入时,虽然phpmyadmin还是显示导入最大限制:20,480 KB,但巨大的80M数据库文件已经被成功的导入了。

如何在mysql中批量导入大的sql文本文件?
在实际工作中,有时经常地时行mysql数据库的导入和导入操作,但对于大型sql文件导入时,phpmyadmin是不行的,有太多限制,比如记录,内存等!

比较好的办法仍是用mysql的source命令:

一、在客户端下操作:
1、进行入客户端
2、mysql>use 数据库名(如果没有,先建一个)
3、mysql>set names 'utf8'; (一般看导入的是什么格式的文件)
4、mysql>source d:/piaoyun.sql;
即可正常导入,如果有错,可以看出错提示

二、PHP文件操作:
建立mysql.php

里面有下面内容
mysql_connet('xxxx');
mysql_query("set names 'utf8'");
mysql_query("source d:/aaa.sql'");

原理同上,主要方便了无法使用命令行用户的操作

如何在mysql中批量导入大的sql文本文件的方法:

<?php

//用来快速Mysql的大数据备份
//使用前请首先按照代码注释修改要导入的SQL文件名、数据库主机名、数据库用户名、密码、数据库名
//同时将数据库文件和本文本一起ftp导网站目录,然后以web方式访问此文件即可
//落伍(www.im286.com)负翁版权所有,可随意使用,但保留版权信息

$file_name="sql.sql"; //要导入的SQL文件名
$dbhost="localhost"; //数据库主机名
$dbuser="user"; //数据库用户名
$dbpass="pass"; //数据库密码
$dbname="dbname"; //数据库名

set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入
$fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件
mysql_connect($dbhost, $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库
mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库
mysql_query('set names utf8');
echo "正在执行导入操作";
while($SQL=GetNextSQL()){
if (!mysql_query($SQL)){
echo "执行出错:".mysql_error()."
";
echo "SQL语句为:
".$SQL."
";
};
}
echo "导入完成";

fclose($fp) or die("Can’t close file $file_name");//关闭文件
mysql_close();

//从文件中逐条取SQL
function GetNextSQL() {
global $fp;
$sql="";
while ($line = @fgets($fp, 40960)) {
$line = trim($line);
//以下三句在高版本php中不需要,在部分低版本中也许需要修改
$line = str_replace("////","//",$line);
$line = str_replace("/’","’",$line);
$line = str_replace("//r//n",chr(13).chr(10),$line);
// $line = stripcslashes($line);
if (strlen($line)>1) {
if ($line[0]=="-" && $line[1]=="-") {
continue;
}
}
$sql.=$line.chr(13).chr(10);
if (strlen($line)>0){
if ($line[strlen($line)-1]==";"){
break;
}
}
}
return $sql;
}
?>

mysql如何导入大SQL文件:
今天需要对MYSQL导入一个33M的SQL文件,可是phpmyadmin只支持到2M,网上找了找,发现可以使用source命令,以下就是方法:
1.导入数据库
常用source 命令
进入mysql数据库控制台
如mysql -u atyu -p
mysql>use web3guo
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source c:/web3guo.sql

2.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名

3.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

MySQL导入大SQL文件的方法:

2008年02月08日 星期五 下午 07:21刚导入一个从mysql库导出的300多M的备份文件,因为phpmyadmin最多支持8M的,文件太大IE停止响应,所以在本地用

mysql -u root -p yourpassword yourdatabasename < c:/sqlfile.sql

但没导入进去,出来一大堆mysql的参数提示,不认输入的命令参数,后来写成下面这个样子,就是去掉了参数和数据之间的空格

mysql -uroot -pyourpassword yourdatabasename < c:/sqlfile.sql

导入就OK了。

导入mysql的时候导入不全,提示 :ERROR at line 1586: Unknown command “\”.

解决方法:
导出的时候加上参数:
mysqldump --default-character-set=utf8

导入的时候也加上:
mysql --default-character-set=utf8

案例:
bin>mysql -uroot -p piaoyunccdata --default-character-set=utf8 <d:/piaoyunccdata.sql

备注:

导出整个数据库
mysqldump --add-locks --add-drop-table -e --default-character-set=utf8 -h127.0.0.1 --password=123456 --user=root stt_user > stt_user.sql

导出整个数据库表结构
mysqldump --add-locks --add-drop-table -d --default-character-set=utf8 -h127.0.0.1 --password=123456 --user=root stt_user > stt_user.sql

导出存储过程和函数
mysqldump -hhostname -uusername -ppassword -ntd -R databasename > backupflie.sql
mysqldump -hlocalhost -uroot -ntd -R hqgr > hqgr.sql
其中的 -ntd 是表示导出存储过程;-R是表示导出函数

导出一张表数据和结构
mysqldump --add-locks --add-drop-table -e --default-character-set=utf8 -h127.0.0.1 --password=123456 --user=root stt_user member> member.sql
导出多张数据库
mysqldump --add-locks --add-drop-table -e --default-character-set=utf8 -h127.0.0.1 --password=123456 --user=root stt_user stt_config > stt.sql

导入
mysql -uroot -p123456 --default-charac

导出简单命令:
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p student >d:/student.sql

Mysql导入大数据库文件的办法:
phpmyadmin是个很方便的mysql数据库管理工具,可以用来管理mysql数据库,导入,导出等。 但是phpmyadmin在导入mysql的时候有个问题,如果要导入的数据库文件比较大,那么导入就会失败。下面教大家一个简单有效的办法,可以导入任 意大小的mysql数据库,理论上不论您的数据库备份文件多大,都可以导入。

方法如下:
1.将数据库备份文件(如backup.sql)上传至网站根目录。
2.将以下代码保存为mysql.php文件,上传至网站根目录。

<?php
system("mysql -hdbhost -udbuser -ppassword dbname < backup.sql");
print "导入成功";
?>

其中
dbhost 改为您的数据库服务器地址(小提示:一般主机默认数据库服务器地址是:localhost)
dbuser 改为您的数据库用户名
password 改为您的数据库用户密码
dbname 改为您的数据库名
backup.sql表示通过ftp上传到网站根目录下数据库文件的文件名(该文件是解压缩后的文件)

3.在浏览器里面访问mysql.php,假设你的网站域名是www.piaoyun.org,那么就在浏览器里面输入 http://www.piaoyun.org/mysql.php,只要浏览器一访问这个mysql.php文件,数据就开始导入,数据导入结束后,就 会显示“导入成功”的字样。这个时间根据您要导入的数据大小决定,一般时间很短。

MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql/var/下面产生mysql- bin.0000* 类似的文件,而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错。
如何关闭MySQL的日志功能:

删除日志:
执行:/usr/local/mysql/bin/mysql -u root -p

输入密码登录后再执行:reset master;
再输入:quit 退出mysql命令模式。

彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed

再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart即可。
如果实在想保留日志,可以在/etc/my.cnf里加入
expire_logs_days = 30
然后重启mysql,这样30天就会自动清理日志。

因为硬盘满了,mysql启动不起来了,删除mysql的日志文件,重启mysql发现错误:
启动的时候出现错误:
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]

网上有不少这个原因的解释,但是都不是我想说的。
data/mysql-bin.index 没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。

删除data/mysql-bin.index文件,再service mysqld start就可以了。

LNMP一键安装包安装的MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql /var/下面产生mysql-bin.0000* 类似的文件,而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错。

如何关闭MySQL的日志功能:

删除日志:
执行:/usr/local/mysql/bin/mysql -u root -p

输入密码登录后再执行:reset master;

再输入:quit 退出mysql命令模式。

彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed

再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart即可。

如果实在想保留日志,可以在/etc/my.cnf里加入
expire_logs_days = 30
然后重启mysql,这样30天就会自动清理日志。

1.使用MyISAM而不是InnoDB

MySQL有很多的数据库引擎,单一般也就用MyISAM和InnoDB。
MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的,那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束,这是保证数据 完整性的精华所在啊。另外,MyISAM会在添加或者更新数据的时候将整个表锁住,这在以后的扩展性能上会有很大的问题。
解决办法很简单:使用InnoDB。
完全错误,反驳理由:
首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。
另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。
最佳方法还是针对具体业务具体处理,例如论坛中版块表,新闻分类表,各种码表等长时间不操作的表,还是要用性能优异的MyISAM引擎。
而需要用到事务处理的例如用户、账目、流水等严格要求数据完整性和时序性的,则需要用InnoDB引擎,并且应用也要用好事务处理机制。当然,事务处理必然要带来大量的性能损耗,但是这在简单高并发应用上是必须的。
最后,外键约束在公共web互联网应用上一般是不用的,因为他会严重影响性能。数据完整性还是靠程序员或者应用架构本身的健壮来维护。而正规的第三范式只是在企业内部MIS系统和12306这种网站上使用。

2.使用PHP的mysql方法

PHP从一开始就提供了MySQL的函数库。很多程序都依赖于mysql_connect、mysql_query、mysql_fetch_assoc等等,但是PHP手册中建议:
如果你使用的MySQL版本在4.1.3之后,那么强烈建议使用mysqli扩展。
mysqli,或者说MySQL的高级扩展,有一些优点:
有面向对象的接口
prepared statements(预处理语句,可以有效防止SQL-注入攻击,还能提高性能)
支持多种语句和事务
另外,如果你想支持多数据库那么应该考虑一下PDO。
不完全错,但要酌情选用:
mysqli固然好,但是不是所有的服务器都为PHP编译了mysqli的支持。
当你的应用如果是能确定只用自己部署的服务器,而应用也是完全自己开发,则mysqli是最好的选择。
但是一旦你的应用有可能部署在虚拟主机或者由其他人部署(例如分布式项目),还是老老实实使用mysql函数集吧,好好封装一下或者使用成熟框架杜绝sql注入。

3.不过滤用户输入

应该是:永远别相信用户的输入。用后端的PHP来校验过滤每一条输入的信息,不要相信Javascript。像下面这样的SQL语句很容易就会被攻击:
$username = $_POST["name"];
$password = $_POST["password"];
$sql = "SELECT userid FROM usertable WHERE username=?$username?AND password=?$password?;"; // run query...
这样的代码,如果用户输入”admin’;”那么,就相当于下面这条了:
SELECT userid FROM usertable WHERE username=?admin?;
这样入侵者就能不输入密码,就通过admin身份登录了。

这一点不用说了,要么MagicQuote,要么选用成熟框架。sql注入老话题了。

4.不使用UTF-8

那些英美国家的用户,很少考虑语言的问题,这样就造成很多产品就不能在其他地方通用。还有一些GBK编码的,也会有很多的麻烦。
UTF-8解决了很多国际化的问题。虽然PHP6才能比较完美的解决这个问题,但是也不妨碍你将MySQL的字符集设置为UTF-8。

大部分情况下对,但也要认真考虑:
要知道,一个UTF-8字符占3个字节,所以比GBK等其他编码的文件大33%。换句话说,相同的网页用UTF-8编码如果是100KB,那么换成GBK 编码则只有66KB。所以即便你的PHP确定要用UTF-8,那么前端页面也要根据情况选择需要的编码。但是,如果PHP用UTF-8,前端模版是 GBK,再加上模版引擎不强大,那么转码工作够你受的。所以尽可能的选用自己需要的编码,而不是简单的选择UTF-8了事。
最后啰嗦一句:UTF-8下:strlen("我")=3,而GBK下:strlen("我")=2

5.该用SQL的地方使用PHP

如果你刚接触MySQL,有时候解决问题的时候可能会先考虑使用你熟悉的语言来解决。这样就可能造成一些浪费和性能比较差的情况。比如:计算平均值的时候不适用MySQL原生的AVG()方法,而是用PHP将所有值循环一遍然后累加计算平均值。
另外还要注意SQL查询中的PHP循环。通常,在取得所有结果之后再用PHP来循环的效率更高。
一般在处理大量数据的时候使用强有力的数据库方法,更能提高效率。

同样酌情考虑:
例如,有些人习惯在建表时,默认值填写CURRENT_TIMESTAMP,用来达到注册时间、发帖时间的效果。 或者在时间判断的SQL语句中,写类似SELECT x FROM tab1 WHERE regdate < UNIX_TIMESTAMP()。那么我只能说,你为系统埋下了很隐蔽的BUG。因为数据库和应用往往不在同一台机器上,时间很容易出现偏差。当你一套 应用的时间参照不准确时,就会出现很大的问题。
正确做法是:不要使用MySQL的任何时间函数,而是在应用里计算时间。如果是分布式应用,一定要有时间服务器来统一管理时间。
而文中说的一些MySQL数学函数 ,也是要慎用。因为在大型应用中,数据库的负担往往是最大的,而复杂的WHERE语句又是造成慢查询的元凶。所以,要把计算尽可能的放在廉价的、不影响全局稳定的应用服务器上,而不是核心数据库上。

6.不优化查询

99%的PHP性能问题都是数据库造成的,一条糟糕的SQL语句可能让你的整个程序都非常慢。MySQL的EXPLAIN statement,Query Profiler,many other tools的这些工具可以帮你找出那些调皮的SELECT。

这点也不用说了,大型应用上甚至不允许使用各种JOIN,哪怕生写两条查询,查回来在用PHP合并数据。

7.使用错误的数据类型

MySQL提供一系列数字、字符串、时间等的数据类型。如果你想存储日期,那么就是用DATE或者DATETIME类型,使用整形或者字符串会让事情更加复杂。
有时候你想用自己定义的数据类型,例如,使用字符串存储序列化的PHP对象。数据库的添加可能很容易,但是这样的话,MySQL就会变得很笨重,而且以后可能导致一些问题。

INT,TinyINT,VARCHAR,CHAR,TEXT这些字段类型的合理选用无可厚非。
而Date、DateTime、TIMESTAMP这三种类型,在大型应用中是绝对不可以使用的,而是要用INT(10) UNSIGNED代替。
一个是性能,另外就是应用中尤其是PHP对UNIX_TIMESTAMP时间戳的转化实在太方便了。用Date要输出各种时间格式反而麻烦。

8.在SELECT查询中使用*

不要使用*在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段,那么可能你的表需要更改了。

9.索引不足或者过度索引

一般来说,应该索引出现在SELECT语句中WHERE后面所有的字段。
例如,假如我们的用户表有一个数字的ID(主键)和email地址。登录之后,MySQL应该通过email找到相应的ID。通过索引,MySQL可以通过搜索算法很快的定位email。如果没有索引,MySQL就需要检查每一项记录直到找到。
这样的话,你可能想给每一个字段都添加索引,但是这样做的后果就是在你更新或者添加的时候,索引就会重新做一遍,当数据量大的时候,就会有性能问题。所以,只在需要的字段做索引。
索引是必须的,但是如果索引都解决不了的查询,考虑memcache或者nosql解决方案吧。

10.不备份

也许不常发生,但是数据库损毁,硬盘坏了、服务停止等等,这些都会对数据造成灾难性的破坏。所以你一定要确保自动备份数据或者保存副本。
这条是作者凑数么?

11.另外:不考虑其他数据库

MySQL 可能是PHP用的最多的数据库了,但是也不是唯一的选择。 PostgreSQL和Firebird也是竞争者,他们都开源,而且不被某些公司所控制。微软提供SQL Server Express,Oracle有10g Express,这些企业级的也有免费版。SQLite对于一些小型的或者嵌入式应用来说也是不错的选择。

这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案。

保存为***.php,上传到网站目下运行就可以清空了。

<?php

$user = ""; //数据库用户名 
$password = "";//数据库密码 
$db_name = "";//数据库名 
?
$link = mysql_connect("localhost:3306",$user,$password); 
mysql_select_db("$db_name",$link); 
echo "<p>正在清空数据库..."; 
$result=mysql_query("SHOW tables",$link); 
while ($currow=mysql_fetch_array($result)) { 
mysql_query("drop TABLE IF EXISTS $currow[0]"); 
echo $currow[0]."<br>"; 
} 
echo "PiaoYun.CC恭喜你清空数据库成功</p>";

?>

在Windows或者Linux下mysql安装后默认的密码为空,
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功

解决办法如下:
1.要是你想用空密码,则将phpmyadmin下的
config.inc.php(根目录)或者config.default.php(根目录)再则:libraries\config.default.php
(友情提示,由于版本不一样可能涉及的文件不同,基本为这三个文件)

中的:

$cfg['Servers'][$i]['AllowNoPassword'] = false;

改为:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

2.要是你想设置密码不为空则将

$cfg['blowfish_secret'] = '123456'; // use here a value of your choice 你要设置的密码

一个VPS,只有20G空间, 用下面的命令查询!

du /usr/local/mysql –max-depth=1 -h

看占掉了其中12G,看到目录里有很多mysql-bin.00000x这种有些一个就要超过1G.
我尝试重启了MySQL,结果显示

MySQL manager or server PID file could not be found! failed!
Starting MySQL.Manager of pid-file quit without updating file. failed!

Google了一下,发现开了log-bin.进入/etc/my.cnf,把其中的log-bin和binlog_format注释掉,然后胆大的删除了bin.00000x.
然后重启就正常了.

看了一下log-bin的功能,如果有备份好习惯的,完全可以不用.况且真出问题了它也未必有效.