学习笔记mysql.docx
- 文档编号:9377099
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:71
- 大小:435.54KB
学习笔记mysql.docx
《学习笔记mysql.docx》由会员分享,可在线阅读,更多相关《学习笔记mysql.docx(71页珍藏版)》请在冰点文库上搜索。
学习笔记mysql
第1章Mysql部署安装
1.1安装前检查
1.检查是否安装mysql:
#rpm-qa|grepmysql
2.尝试删除:
#rpm-e--nodepsmysqlxxx(我实验从来就没有成功过)
3.安装方法:
#yum-yinstallmysql-server(我没有用这种方式)
4.删除方法
#yum-yremovemysql-server
#yum-yremovemysql的结果省略截图,之后确认mysql被全部删除干净
1.2编译安装
1)检查是否安装cmake----cmake-i
安装cmake
wget-chttp:
//www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz
tar-zxvfcmake-2.8.3.tar.gz
cdcmake-2.8.3
./bootstrap
./configure
make&&makeinstall
2)安装MYSQL5.5.8
wget-c
tar-zxvfmysql-5.5.15.tar.gz
cmake-DCMAKE_INSTALL_PREFIX=/opt/mysql-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1-DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_MEMORY_STORAGE_ENGINE=1-DWITH_FEDERATED_STORAGE_ENGINE=1-DWITH_PARTITION_STORAGE_ENGINE=1-DWITH_READLINE=1-DWITH_SSL=system-DWITH_ZLIB=system-DENABLED_LOCAL_INFILE=1-DDEFAULT_CHARSET=utf8-DDEFAULT_COLLATION=utf8_general_ci-DEXTRA_CHARSETS=all-DMYSQL_TCP_PORT=3306-DMYSQL_USER=mysql
cdmysql-5.5.15/
make&&makeinstall
慢长的等待过后终于完成了。
具体配置选项解释:
源代码配置选项说明:
//mysql安装的主目录,5.5.8版本默认为/usr/local/mysql,所以可以不添加
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
//mysql数据保存的路径,自定义
-DMYSQL_DATADIR=/home/system_username/mysql/mysqldata
//mysql配置文件地址------Thedefaultfoptionfiledirectory
-DSYSCONFDIR=/etc
//Compilestorageenginexxxstaticallyintoserver
/*Storageenginesarebuiltasplugins.Youcanbuildapluginasastaticmodule(compiledintotheserver)
*oradynamicmodule(builtasadynamiclibrarythatmustbeinstalledintotheserverusingtheINSTALL
*PLUGINstatementorthe--plugin-loadoptionbeforeitcanbeused).Somepluginsmightnotsupportstatic
*ordynamicbuilding.
*/
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
//Unixsocketfile
/*
*TheUnixsocketfilepathonwhichtheserverlistensforsocketconnections.Thismustbeanabsolutepath
*name.Thedefaultis/tmp/mysql.sock
*/
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
//数据库服务器TCP/IP连接的监听端口,默认为3306
-DMYSQL_TCP_PORT=3306
//WhethertoenableLOCALcapabilityintheclientlibraryforLOADDATAINFILE
/默认为关闭,这里开启
-DENABLED_LOCAL_INFILE=1
//数据库编码设置
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
1.3初始化配置
添加用户(组)
groupaddmysql
useradd-gmysqlmysql
chown–Rmysql:
mysql/opt/mysql(即将整个mysql置于mysql用户、mysql组下)
cpsupport-files/mysql.server/etc/init.d/mysqld
切换到mysql用户下
cp/opt/mysql/support-files/my-f/etc/f(保证f为mysql用户、mysql组)
在mysql用户下执行
bashscripts/mysql_install_db--user=mysql--basedir=/opt/mysql--datadir=/opt/mysql/data/
bashscripts/mysql_install_db--user=mysql--basedir=/usr/local/webserver/mysql--datadir=/data/mysql/
最近发现上面的写法,尤其是datadir的写法,比之前“--datadir=/opt/mysql/data/”写法简单明了。
1.3.1异常1
如果出现上述情况Can'tcreate/writetofile'/tmp/#sql127_811733_0.MYI'(Errcode:
13),请修改f
[mysql@kw2db2mysql]$mkdirtmp
[mysql@kw2db2mysql]$ll
▒ܼ▒80
drwxr-xr-x2mysqlmysql409602-2011:
15bin
-rw-r--r--1mysqlmysql1798710-1220:
10COPYING
drwxr-xr-x5mysqlmysql409602-2011:
21data
drwxr-xr-x2mysqlmysql409602-2011:
15docs
drwxr-xr-x3mysqlmysql409602-2011:
15include
-rw-r--r--1mysqlmysql760410-1220:
10INSTALL-BINARY
drwxr-xr-x3mysqlmysql409602-2011:
15lib
drwxr-xr-x4mysqlmysql409602-2011:
15man
drwxr-xr-x10mysqlmysql409602-2011:
15mysql-test
-rw-r--r--1mysqlmysql255210-1220:
10README
drwxr-xr-x2mysqlmysql409602-2011:
15scripts
drwxr-xr-x27mysqlmysql409602-2011:
15share
drwxr-xr-x4mysqlmysql409602-2011:
15sql-bench
drwxr-xr-x2mysqlmysql409602-2011:
15support-files
drwxrwxr-x2mysqlmysql409602-2011:
25tmp
[mysql@kw2db2mysql]$vi/etc/f
具体修改内容是:
具体参考下文:
今天用phpmyadmin查看数据库中的表时,提示错误:
Can'tcreate/writetofile"/tmp/#sql_4626_0.MYI",在mysql的命令行下面,使用select命令不会出错,可以查出结果,但使用describe命令时,会出现同样的错误。
google了下,都是说在f的[mysqld]段内加上:
tmpdir=/tmp,然后修改/tmp为777。
按照这个修改了,仍然是没用。
后来在一外国网站上查到这种该法:
Trythefollowing:
1.mkdir/var/lib/mysql/tmp
2.chmodmysql:
mysql/var/lib/mysql/tmp
3.Addthefollowinglineintothe[mysql]section:
tmpdir=/var/lib/mysql/tmp
4.restarttheserver
照着这个做法,可以正确使用。
再次执行mysql_install_db
1.3.2异常2
编译安装后,启动mysql后,执行:
bin/mysqladmin–urootpassword“password”提示没有权限(passwordno之类的)。
网上提供的多种方法都无效,原因是mysql数据库的user表为空(即user表中没有root用户,为什么?
)。
经查data/mysql目录下的user.MYD文件大小为0
解决办法是:
删除data下的所有文件重新执行mysql_install_db
1.4启动mysql
/etc/init.d/mysqldstart
停止/usr/bin/mysqladmin-uroot-pshutdown
1.5常见问题
/etc/init.d/mysql:
line256:
my_print_defaults:
commandnotfound
解决方法:
检查/etc/f是否存在datadir和basedir如果没有请增加datadir和basedir目录路径。
如下:
[mysqld]
port=3306
basedir=/opt/mysql
datadir=/opt/mysql/data
第2章数据处理
2.1创建Mysql备份脚本
#!
/bin/sh
#File:
/home/mysql/backup.sh
#Databaseinfo
DB_NAME="test"
DB_USER="root"
DB_PASS="password"
#Othersvars
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/mysql/backup"
DATE=`date+%F`
#TODO
$BIN_DIR/mysqldump--opt-u$DB_USER-p$DB_PASS$DB_NAME|gzip>$BCK_DIR/db_$DATE.gz
--opt选项会对转储过程进行优化,生成的备份文件会小一点,后的管道操作会进行数据压缩。
mysqldump--opt[databasename][mytable1,mytable2,…]在数据库后接数据表名,只导出指定的数据表,多个数据表可用逗号分隔。
2.2数据迁移
用mysqldump命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。
重复执行可定期更新远程数据库。
%mysqladmin-hremote_hostcreatetestdb
%mysqldump--opttestdb|mysql-hremote_hosttestdb
另外还可通过ssh远程调用服务器上的程序,如:
%sshremote_hostmysqladmincreatetestdb
%mysqldump--opttestdb|sshremote_hostmysqltestdb
2.3定时任务
[root@TRsServertrshome]#vi/etc/crontab
SHELL=/bin/bash
PATH=/sbin:
/bin:
/usr/sbin:
/usr/bin
MAILTO=root
HOME=/
#run-parts
01****rootrun-parts/etc/cron.hourly
024***rootrun-parts/etc/cron.daily
224**0rootrun-parts/etc/cron.weekly
4241**rootrun-parts/etc/cron.monthly
0118**5root/home/trs/mysqlbackup.sh
基本上,crontab的指令格式分为六个部分,前五个为时间间隔,最后则是执行的指令。
每一个部分用空格来区隔。
1)几分--0-59
2)几时--0-23
3)几日--1-31
4)几月--1-12或使用英文名称
5)星期几--0-7或使用英文名称
6)工作命令--指令,shellscript,程序....(建议使用绝对路径)
2.4数据库改名及恢复
假设,已有一数据库名为o_dbName,欲改名为n_dbName。
1、备份,mysqldump-uroot-ppwdo_dbName>c:
\database.sql
2、创建新数据库n_dbName
3、导入表,mysql -uroot-ppwdn_dbName /database.sql 2.5冷备恢复(Innodb) 现将别的数据库目录下的data文件夹直接复制过来的,里面有三个数据库mysql、test和backupctrl,主要想要backupctrl数据库,记住不是备份,是拷贝,而且backupctrl是使用innodb作为存储引擎的,这两方面综合起来就导致了1146这个错误。 因为要使用innodb做存储引擎,所以要对my.ini文件进行相应的修改。 在my.ini文件中,你可以找到关于innodb的相关设置,但是被注释掉了。 因为mysql5.1版本后,innodb不在作为默认的设置了。 首先将skip-innodb注释掉,然后需要设置正确innodb的相关参数。 采用innodb存储引擎,关系到data文件夹下面的一些文件: ib_logfile0、ib_logfile1和ibdata1,另外还有一个就是数据库名下面的众多.frm文件。 先对这几个文件作简要介绍。 Øib_logfile0和ib_logfile1是关于数据库的一些日志文件; Ø.frm文件是数据库中很多的表的结构描述文件; Øibdata1文件时数据库的真实数据存放文件。 进入数据库,用showtables;命令发现数据库表存在,但是执行select等操作就会出现1146: Tabledoesn’texist这个错误了。 其实这是由ibdata1文件的错误引起的,这个应该在日志文件ib_logfile0和ib_logfile1中找到(这个本人没有验证),于是把ibdata1文件删除掉,再次执行该命令,发现没有提示错误了,但进入数据库以后,操作仍就导致1146这个错误。 后来仔细一下,也是,你说你把ibdata1文件删除,相当于把数据库的真实数据删除了,这时你就会问为什么数据库表还存在呢,都能看到(其实我当初就是这么想的),因为数据库表结构的描述是在.frm的众多文件中的,所以能通过showtables查看到。 那么下一个问题就出来了: ibdata1文件是从别人那里拷贝过来的,为什么在那边能用,到我这边就不能用了呢? 这就是最核心的问题所在,因为mysql是采用缓冲方式来讲数据写入到ibdata1文件中的,这正是fflush()函数存在的理由。 因此当别人的mysql在运行时,你对data文件夹进行拷贝,即对ibdata1进行拷贝肯定会导致该文件中的数据出错的。 2.6装载数据(LOADDATAINFILE) 2.6.1基本语法 LOADDATA[LOW_PRIORITY|CONCURRENT][LOCAL]INFILE'file_name' [REPLACE|IGNORE]INTOTABLEtbl_name [CHARACTERSETcharset_name] [{FIELDS|COLUMNS}[TERMINATEDBY'string'] [[OPTIONALLY]ENCLOSEDBY'char'] [ESCAPEDBY'char']] [LINES[STARTINGBY'string'] [TERMINATEDBY'string']] [IGNOREnumberLINES] [(col_name_or_user_var,...)] [SETcol_name=expr,...]. ✧LOW_PRIORITY设置对于表级锁的存储引擎会导致loaddata需要在没有任何其他客户端在访问这张表时才会被执行 ✧CONCURRENT设置对于满足高并发(不包含空块)的myisam表执行loaddata时,其他线程可以检索这个表的数据 ✧TERMINATEDBY将字段、行之间的间隔符进行过滤,以此做拆分 ✧ENCLOSEDBY将字符两端的引号字符过滤掉,去掉字符串前后的符号,如引号 ✧ESCAPEDBY转义,对字符串中的特殊字符进行转义 ✧LINESSTARTINGBY可以将每行包含特定字符的记录过滤后将特定字符后面的字符插入数据库 ✧IGNOREumberLINES可以设置将文件前多少行忽略 ✧SETcol_name=expr可以将文本中未指定默认值的字段进行赋值 注: 1.mysql里面用“\”(反斜杠)对字符进行转义,表达一个真实的“\”需要写成“\\” 2.ENCLOSEDBY、ESCAPEDBY后面的值只能是单个的字符 3.TERMINATEDBY、LINESSTARTINGBY和LINESTERMINATEDBY后面可以跟多个字符 2.6.2远程loaddata --local-infile选项 0启动mysqld从服务器端禁用所有LOADDATALOCAL命令;1启用LOADDATALOCA。 如果LOADDATALOCALINFILE在服务器或客户端被禁用,试图执行该语句的客户端将收到下面的错误消息: ERROR1148: TheusedcommandisnotallowedwiththisMySQLversion (出现以上报错的时候就要检查下是否设置了--local-infile=1了,默认是0的) 在需要远程导入数据的主机上授权用户: [MM-Writable@v031014.sqa.cm4~] grantselect,insert,update,deleteontest.*to'qianwei'@'%'identifiedby'qianwei'; (远程登录的时候必须要有密码的帐号) 测试表结构如下: [MM-Writable@v031014.sqa.cm4~] root@test12: 01: 06>showcreatetabletmp_qw_test\G ***************************1.row*************************** Table: tmp_qw_test CreateTable: CREATETABLE`tmp_qw_test`( `id`bigint(20)unsignedNOTNULLauto_increment, `user_id`bigint(20)NOTNULL, `target_id`bigint(20)NOTNULL, `group_id`bigint(20)NOTNULL, `common_friend_count`int(11)NOTNULL, `common_friends`varchar(512)NOTNULL, `gmt_create`datetimeNOTNULL, `gmt_modified`datetimeNOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=gbk 1rowinset(0.00sec) root@test12: 09: 00>select*fromtmp_qw_test; Emptyset(0.00sec) 数据文件格式如下: [MM-Writable@dev031033.sqa.cm4/tmp] $moretmp_qw_test.txt "2011-04-0300: 00: 00",100001536,34806598,11217864,1,"103924803" "2011-04-0300: 00: 00",100001536,34806598,204886714,1,"103924803" "2011-04-0300: 00: 00",100001536,34806598,48259232,1,"103924803" "2011-04-0300: 00: 00",100001536,34806598,201869594,1,"103924803" "2011-04-0300: 00: 00",100001536,34806598,76686624,1,"1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习笔记 mysql 学习 笔记