1.
myisam 与 innodb的区别进行总结,并讨论在什么情况下用什么ENGINE!
MyISAM InnoDB
事务 不支持 支持
数据行锁定 不支持,只有表锁定 支持
外键约束 不支持 支持
表空间大小 相对小 相对大,最大是2倍
全文索引 支持 不支持
GIS数据 支持 不支持
COUNT问题 无 执行COUNT(*)查询时,速度慢
ENGINE是决定数据库的引擎是myisam或innodb,
2.
创建表,表内的数据由/etc/passwd的内容(name,uid,gid,home directory,bashh)来提供
自动导入进来
/etc/init.d/mysqld start 启动mysql
#mysql
create database passwd; 创建库
use passwd; 进入库
create table passwd (name char(20) , uid int , gid int , home char(30) , shell char(30));
创建表
exit
cat /etc/passwd 查看 需要的为第1,3,4,6,7列
awk -F : '{print $1, $3, $4, $6, $7}' /etc/passwd > /tmp/passwd
cat /tmp/passwd
此时显示每列之间应该有空格
#mysql
use passwd; 进入库
load data inflie '/tmp/passwd' into table passwd fields terminated by '';
3.
使用mydumper,myload进行备份还原,并与mysqldump进行速度比较
seq 1 5000000 > /tmp/bigfile 创建文件bogfile 内容为从 1 到 5000000 seq表示排序
ll -h /tmp/bigfile
-rw-r--r-- 1 root root 52M 01-30 10:12 /tmp/bigfile 文件大小为52M
create database aa; 创建库aa
mysql> use aa;
mysql> create table aa (a int);
mysql> load data infile '/tmp/bigfile' into table aa;
mysqldump 方式的测试
time mysqldump -u root -p aa > /tmp/aa.bak aa库备份到 /tmp/aa.bak
real 0m3.915s
user 0m1.275s
sys 0m0.191s
# mysql
drop database aa; 删除aa库
create database aa; 新建一个库 aa
exit
time mysql -u root -p aa < /tmp/aa.bak 从/tmp/aa.bak 还原之前备份的库aa到新建的库aa中
real 0m6.105s
user 0m1.078s
sys 0m0.036s
# mysql 进入 查看是否还原成功
use aa;
show tables;
desc aa;
select * from aa;
mydumper,myload 方式的测试
cmake-2.6.4-7.el5.i386.rpm
mydumper-0.2.3.tar.gz
两个包都放在了/usr/src/下
mount /dev/cdrom /mnt
yum install gcc gcc-c++ glib2-devel mysql-devel zlib-devel pcre-devel -y
cd /usr/src
rpm -ivh cmake-2.6.4-7.el5.i386.rpm
tar fvxz mydumper-0.2.3.tar.gz
cd mydumper-0.2.3
cmake .
make && make install
mkdir -pv /tmp/sqlbak 创建目录 备份用
time mydumper -B aa -u root -o /tmp/sqlbak 备份
real 0m3.303s
user 0m0.882s
sys 0m0.078s
#mysql 进入mysql 将原有库aa删除 建立新的库aa
drop database aa;
create database aa;
exit
time myloader -u root -d /tmp/sqlbak -B aa 还原
real 0m4.284s
user 0m0.515s
sys 0m0.188s
通过比较 mydumper myloader 要快
4.
全备份结合binlog来一个备份实验
vim /etc/my.cnf
[mysqld]
log-bin=binlog
log-bin-index=binlog.index
sync_binlog=0
service mysqld restart
cd /var/lib/mysql/
ls
会多文件
binlog.000001 什么时间对数据库做了什么 只记录变动的(增,删,改)
binlog.index 记录当前目录下 那些是索引文件
#mysql
create database a; 创建库
use a;
create table a (a int); 创建表
insert into a values (1); 插入
insert into a values (2);
insert into a values (3);
select * from a;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
drop table a; 将表a删除
exit
mysqlbinlog binlog.000001 查看一下之前的记录 显示从at 175到 at 509 之间为我之前创建表a并
为其添加数据的记录
mysqlbinlog --start-position 175 --stop-position 509 binlog.000001 |mysql -u root -p
还原从at 175到 at 509 之间的记录
#mysql
use a;
show tables; 查看表a已经回来了
+-------------+
| Tables_in_a |
+-------------+
| a |
+-------------+
1 row in set (0.00 sec)
mysql> select *from a; 表a中的数据也都还原了
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
任务计划
vim /etc/crontab 添加
*/1 * * * * root mysql -u root -p -e 'flush logs;'
每分钟一次
cd /var/lib/mysql/
ls
会发现binlog.000001 binlog.000002 ....binlog.00000n 每分钟都会增加一个
5.
数据库的大小,备份速度和什么相关
对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据、日志文件的吞吐量,写磁盘数据文件的吞吐量。
读吞吐量的大小取决于磁盘读取数据的速度,而磁盘读取的速度又取决于数据文件在磁盘中的位置。因此,位于不同盘符上不同数据库文件的读取速度都不相同。
提高读吞吐量:
使用更快的磁盘。
把多个数据库文件存储在不同的物理磁盘上
减少数据库文件碎片级别
提高写吞吐量:
使用更快的磁盘进行备份
把备份文件分割成多个文件(在相同或不同的物理磁盘上,这取决于磁盘的吞吐量)
使用备份压缩工具。假如压缩速度非常好的话,那么就会减少写到磁盘上的数据量,从而加大写吞吐量。一般情况执行这种压缩程序都会消耗大量的CPU资源