mysql运维
一、 数据库的备份
1. 导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
例:mysqldump -u dbadmin -p myblog > myblog.sql
2. 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
例:mysqldump -u dbadmin -p myblog wp_users> blog_users.sql
3. 导出一个数据库结构
mysqldump -u dbadmin -p -d --add-drop-table myblog > blog_struc.sql
说明:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4. 导出数据库一个表结构
mysqldump -u dbadmin -p -d --add-drop-table myblog wp_users> blog_users_struc.sql
说明:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
带语言参数导出:mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
5. 数据库的导入
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
mysql -u root -p ***** myblog < myblog.sql
这种方法,我以前经常现在很少用了,因为很容易产生乱码,因为:导出数据库时,你如果忘了设置导出字符集的话,在导入的时候,就有可能会出问题.假如,你导出时设置导出时设置了utf8的编码,但是你又把你的数据库现在的字符集改成了gb2312的.这样又会乱码。
用 source 语句
use myblog;
set names utf8; #这里的字符集根你的将要导入的数据库的字符集一至。
source myblog.sql;
6. 查看导出的sql文件的编码
file base_user.sql
7. 转成要用的编码
iconv -f utf-8 -t gbk base_user.sql >base_user_gbk.sql
8. 连接数据库并查看当前库的编码
status;
9. 设置成需要的编码
set names 'gbk';
10. 通过拷贝frm myd myi opt实现mysql的备份和还原
frm myd myi opt的解释
.frm保存的是描述了表的结构
.MYD保存的是表的数据记录
.MYI保存的是表的索引
.opt保存的是数据库的字符集
ls |grep opt | xargs catdefault-character-set=utf8default-collation=utf8_general_ci
备份数据库
创建一个数据库,create database test;这个时候去data目录下面看看,会产生一个test文件夹,里面只有一个db.opt文件,然后你在创建一些表,添加一些数据后,你在去data/test下面看看,里面多了一些.frm,.myd的文件。
tar czvf /home/databak/test.tar.gz /usr/local/mysq/data/test
这样就备份好了。
还原数据库
进入test数据库
use test;
show tables;
在这儿你会看到,你新增加的表。
删除data/test目录下面的frm,myd,myi这三种类型的文件
use test;
show tables;
这个时候,一张表都没有。
还原表
tar zxvf /home/databak/test.tar.gz -C /usr/local/mysq/data
在查看test的表
use test;
show tables;
这个时候,新增加的表又出来了。
如果是直接把data下面的test目录删除掉的话,就重新create database test;会产生一个新的test目录,然后在把备份的数据,还原过来就行了。个人觉得这种备份比较好,导出,导入比较麻烦,不用记得备份命令,只要会copy就行了。在不改变数据库配置的前提下,这种备份,还原基本上不会出现乱码的。
二、 添加用户并授权
添加任何机器都能登录的用户
GRANT ALL PRIVILEGES ON dbName.* TO test@”%” identified by “1111”;
%:代表所有的机器 也可以单独指定某个允许的客户端机器
GRANT ALL PRIVILEGES ON *.* TO ‘bae’@'%’ IDENTIFIED BY ’1111′ with grant option; 有授权权限
添加172.16.184.233机器登录的用户
GRANT ALL ON dbName.* TO test@172.16.184.233 IDENTIFIEDBY “1111”;
添加 一个用户 授 增 删 改 查 的权限。
GRANT SELECT,INSERT,DELETE,UPDATE ON dbName.* TO test@% IDENTIFIEDBY “1111”;
三、 mysql定时备份
shell脚本
vi /home/zhangy/database_bak.sh
#!/bin/sh
# File: /home/zhangy/database_bak.sh
# Database info bakupmysql TANK 2009/11/04
DB_USER="root" #用户名
DB_PASS="********" #密码
DB_NAME="myblog" #要备份的数据名
<SPAN id=more-161></SPAN># Others vars
DATE=`date +%Y_%m_%d` #要备份的日期
YESTERDAY=`date -d yesterday +%Y_%m_%d` #删除昨天的备份
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/zhangy/database_bak" #备份路径
cd $BCK_DIR
#删除以前该数据库的备份
if [ -f $YESTERDAY$DB_NAME".sql" ]
then
rm -f $YESTERDAY$DB_NAME".sql"
fi
# 备份
${BIN_DIR}/mysqldump --opt -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BCK_DIR}/${DATE}${DB_NAME}.sql
定期执行
把shell放到crontab里面。
#查看crond是否已启动
[root@BlackGhost cron]# ps -e|grep crond
21519 ? 00:00:00 crond
#打开crontab
[root@BlackGhost cron]# crontab –e
#在里面加上一行
00 18 * * * /home/zhangy/database_bak.sh
#查看一下是否已加上
[root@BlackGhost cron]# crontab –l
四、 Mysql卸载与安装
卸载
查找已安装的myslq 版本:
#rpm -qa | grep mysql (注意大小写,如果mysql 不行就换MySQL)
在屏幕上将显示已安装的mysql包名如:mysql-5.0.22-2.1.0.1 ;
将搜索出的包名卸载:
#rpm -e --nodeps mysql-5.0.22-2.1.0.1 (nodeps表示强制删除)
安装
安装mysql
yum install mysql
安装mysql服务器
yum install mysql-server
五、 mysql出错列表
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在 (SQLSTATE: 42S22 )
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1064:语法错误,常见的比如注释-- 后没加空格
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1193:变量没声明,常在写存储过程时发生
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
例:mysqldump -u dbadmin -p myblog > myblog.sql
2. 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
例:mysqldump -u dbadmin -p myblog wp_users> blog_users.sql
3. 导出一个数据库结构
mysqldump -u dbadmin -p -d --add-drop-table myblog > blog_struc.sql
说明:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4. 导出数据库一个表结构
mysqldump -u dbadmin -p -d --add-drop-table myblog wp_users> blog_users_struc.sql
说明:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
带语言参数导出:mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
5. 数据库的导入
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
mysql -u root -p ***** myblog < myblog.sql
这种方法,我以前经常现在很少用了,因为很容易产生乱码,因为:导出数据库时,你如果忘了设置导出字符集的话,在导入的时候,就有可能会出问题.假如,你导出时设置导出时设置了utf8的编码,但是你又把你的数据库现在的字符集改成了gb2312的.这样又会乱码。
用 source 语句
use myblog;
set names utf8; #这里的字符集根你的将要导入的数据库的字符集一至。
source myblog.sql;
6. 查看导出的sql文件的编码
file base_user.sql
7. 转成要用的编码
iconv -f utf-8 -t gbk base_user.sql >base_user_gbk.sql
8. 连接数据库并查看当前库的编码
status;
9. 设置成需要的编码
set names 'gbk';
10. 通过拷贝frm myd myi opt实现mysql的备份和还原
frm myd myi opt的解释
.frm保存的是描述了表的结构
.MYD保存的是表的数据记录
.MYI保存的是表的索引
.opt保存的是数据库的字符集
ls |grep opt | xargs catdefault-character-set=utf8default-collation=utf8_general_ci
备份数据库
创建一个数据库,create database test;这个时候去data目录下面看看,会产生一个test文件夹,里面只有一个db.opt文件,然后你在创建一些表,添加一些数据后,你在去data/test下面看看,里面多了一些.frm,.myd的文件。
tar czvf /home/databak/test.tar.gz /usr/local/mysq/data/test
这样就备份好了。
还原数据库
进入test数据库
use test;
show tables;
在这儿你会看到,你新增加的表。
删除data/test目录下面的frm,myd,myi这三种类型的文件
use test;
show tables;
这个时候,一张表都没有。
还原表
tar zxvf /home/databak/test.tar.gz -C /usr/local/mysq/data
在查看test的表
use test;
show tables;
这个时候,新增加的表又出来了。
如果是直接把data下面的test目录删除掉的话,就重新create database test;会产生一个新的test目录,然后在把备份的数据,还原过来就行了。个人觉得这种备份比较好,导出,导入比较麻烦,不用记得备份命令,只要会copy就行了。在不改变数据库配置的前提下,这种备份,还原基本上不会出现乱码的。
二、 添加用户并授权
添加任何机器都能登录的用户
GRANT ALL PRIVILEGES ON dbName.* TO test@”%” identified by “1111”;
%:代表所有的机器 也可以单独指定某个允许的客户端机器
GRANT ALL PRIVILEGES ON *.* TO ‘bae’@'%’ IDENTIFIED BY ’1111′ with grant option; 有授权权限
添加172.16.184.233机器登录的用户
GRANT ALL ON dbName.* TO test@172.16.184.233 IDENTIFIEDBY “1111”;
添加 一个用户 授 增 删 改 查 的权限。
GRANT SELECT,INSERT,DELETE,UPDATE ON dbName.* TO test@% IDENTIFIEDBY “1111”;
三、 mysql定时备份
shell脚本
vi /home/zhangy/database_bak.sh
#!/bin/sh
# File: /home/zhangy/database_bak.sh
# Database info bakupmysql TANK 2009/11/04
DB_USER="root" #用户名
DB_PASS="********" #密码
DB_NAME="myblog" #要备份的数据名
<SPAN id=more-161></SPAN># Others vars
DATE=`date +%Y_%m_%d` #要备份的日期
YESTERDAY=`date -d yesterday +%Y_%m_%d` #删除昨天的备份
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/zhangy/database_bak" #备份路径
cd $BCK_DIR
#删除以前该数据库的备份
if [ -f $YESTERDAY$DB_NAME".sql" ]
then
rm -f $YESTERDAY$DB_NAME".sql"
fi
# 备份
${BIN_DIR}/mysqldump --opt -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BCK_DIR}/${DATE}${DB_NAME}.sql
定期执行
把shell放到crontab里面。
#查看crond是否已启动
[root@BlackGhost cron]# ps -e|grep crond
21519 ? 00:00:00 crond
#打开crontab
[root@BlackGhost cron]# crontab –e
#在里面加上一行
00 18 * * * /home/zhangy/database_bak.sh
#查看一下是否已加上
[root@BlackGhost cron]# crontab –l
四、 Mysql卸载与安装
卸载
查找已安装的myslq 版本:
#rpm -qa | grep mysql (注意大小写,如果mysql 不行就换MySQL)
在屏幕上将显示已安装的mysql包名如:mysql-5.0.22-2.1.0.1 ;
将搜索出的包名卸载:
#rpm -e --nodeps mysql-5.0.22-2.1.0.1 (nodeps表示强制删除)
安装
安装mysql
yum install mysql
安装mysql服务器
yum install mysql-server
五、 mysql出错列表
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在 (SQLSTATE: 42S22 )
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1064:语法错误,常见的比如注释-- 后没加空格
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1193:变量没声明,常在写存储过程时发生
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能