安装支持包
yum -y install ncurses-devel libaio-devel
解压cmake
tar xf cmake-2.8.6.tar.gz -C /usr/src/ cd /usr/src/cmake-2.8.6/
./configure && gmake && gmake install
建立MySQL用户账号
useradd -s /sbin/nologin -M mysql
解压mysql,配置及编译安装
tar xf mysql-5.5.22.tar.gz -C /usr/src/
cd /usr/src/mysql-5.5.22/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install
修改属主,属组
chown -R mysql:root /usr/local/mysql
创建,修改my.cnf
/bin/cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
添加开机自启动
/bin/cp /usr/local/mysql/support-files/mysql.server
/etc/init.d/mysqld chmod +x /etc/init.d/mysqld chkconfig mysqld
–add
创建软链接
ln -s /usr/local/mysql/bin/* /usr/local/bin
执行mysql_install_db脚本初始化
/usr/local/mysql/scripts/mysql_install_db --user=mysql
–basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
启动mysql
/etc/init.d/mysqld start
查看监听端口
netstat -antup | grep 3306
查看所有数据库
show databases;
非交互式查看所有数据库
mysql -uroot -p111111 -e ‘show databases;’
创建yunjisuan数据库
create database yunjisuan;
删除yunjisuan数据库
drop database yunjisuan;
创建数据库的表
create table users (user_name char(20) not null,user_passwd char(30)
default ‘’,primary key (user_name));
读
select 字段名 from 空间名.表名 select user,host,password from mysql.user;
select * from mysql.user where user_name=’tzf’
查看表结构
desc yunjisuan.users;
插入数据
①insert into 空间名.表名(user_name,user_passwd)values(值1,值2) ②insert into
空间名.表名 values(值1,值2)
更新数据
update 空间名.表名 set(user_passwd)=’’ where user_name=’tzf’;
删除数据
delete from 空间名.表名 where user_name=’tzf’;
练习
建立数据库imployee_salary
mysql> use imployee_salary;
Database changed
创建数据库imployee_salary下的表table IT_salary
mysql> create table IT_salary(岗位类型 char(20) not null,姓名 char(20) not
null,年龄 int,员工ID int not null,学历 char(6),薪资 int not null,primary y
key(员工ID));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into
IT_salary(岗位类型,姓名,年龄,员工ID,学历,薪资)values(‘老师’,‘孙’,‘20’,‘001’,‘本科’,‘12000’);
Query OK, 1 row affected (0.01 sec)
mysql> insert into
IT_salary(岗位类型,姓名,年龄,员工ID,学历,薪资)values(‘工程师’,‘田’,‘23’,‘002’,‘本科’,‘10000’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into
IT_salary(岗位类型,姓名,年龄,员工ID,学历,薪资)values(‘软件工程师’,‘张’,‘30’,‘003’,‘本科’,‘40000’);
Query OK, 1 row affected (0.01 sec)
mysql> insert into
IT_salary(岗位类型,姓名,年龄,员工ID,学历,薪资)values(‘硬件工程师’,‘王’,‘33’,‘004’,‘博士’,‘45000’);
Query OK, 1 row affected (0.05 sec)
mysql> select * from IT_salary;
±----------------±-------±-------±---------±-------±-------+
| 岗位类型 | 姓名 | 年龄 | 员工ID | 学历 | 薪资 |
±----------------±-------±-------±---------±-------±-------+
| 老师 | 孙 | 20 | 1 | 本科 | 12000 |
| 工程师 | 田 | 23 | 2 | 本科 | 10000 |
| 软件工程师 | 张 | 30 | 3 | 本科 | 40000 |
| 硬件工程师 | 王 | 33 | 4 | 博士 | 45000 |
±----------------±-------±-------±---------±-------±-------+
4 rows in set (0.00 sec)
调用密码函数,对密码加密
update 空间名.表名 set password= password(‘’) where name=’tzf’;
(数据库的加密函数)
设置用户权限(用户名@登陆IP)用户
grant all on . to ‘root’@’192.168.163.1’ identified by ‘111111’
(all 所有的权限(select delete update insert)) grant all on . to ‘root@%’
identified by‘111111’(_ :任意单个字符,%任意长度的任意字符)
刷新数据
flush privileges
查看当前用户的权限
show grants;
查看其它用户的权限
show grants for ‘admin@192.168.163.1236’;
撤销用户权限
revoke select on . from ‘root@ 192.168.163.1’;
远程连接
远程登录,就算在本地登录,也要以-h远程的方式登录,真正的本地登录,后面是 -h 127.0.0.1(localhost)才是本地登录,这个登录的命令,没有指定IP,默认是-h localhost
grant all on . to ‘yunjisuan’@’localhost’ identified by ‘123123’;
flush privileges;再mysql -uyunjisuan -p123123 -h localhost 可以登陆了
以上是再客户端本机登录,在别的客户端想要登录还要创建别的登录IP
grant all on . to ‘yunjisuan’@’对方Ip’ identified by ‘123123’;
flush privileges;刷新后登录mysql -uyunjisuan -p123123 -h 本机IP 可登录成功。
备份策略:
小型公司 50-70台服务器 每天一次全备; 大型公司 每天一次增量备份,一周一次全备份。 全量备份
mysqldump(主库备份) 阻塞数据库的写入影响用户的写入,开启mysqldump其他用户不能写入数据
全量备份
mysqldump -uroot -p111111 yunjisun > /tmp/yunjisun-$(data+%y%m%d).sql
(数据库yunjisuan备份到 /tmp/yunjisun)
恢复全量备份
source /tmp/yunjisun- ( d a t a + < / t m p / y u n j i s u n − (data+%F).sql (交互式恢复全量备份) mysql -uroot -p111111 < /tmp/yunjisun- (data+</tmp/yunjisun−(data+%y%m%d).sql (非交互式恢复全量备份)
误区:库名必须在,只能删除表,必须加参数mysqldump -uroot -p111111 --database yunjisun > /tmp/yunjisun-$(data +%F%T).sql
数据量50G 压缩数据包
mysqldump -uroot -p111111 --opt --all-databases| gzip-9 > /tmp/-$(data
+%F%T).gz(数据包是压缩包的4-5倍)
增量备份 (MySQL 提供的二进制日志间接实现)
vim /etc/my.cnf
开启MySQL的二进制日志功能log-bin=mysql-bin
开启 增量恢复的方法
一般的恢复:mysqlbinlog /usr/local/mysqldata/mysql-bin.000001| mysql -uroot -p111111
(flush logs; 刷新日志) show master startus;(显示操作的id)
位置恢复:mysqlbinlog --start-postion=’操作id’–stop-postion=’操作id’ /usr/local/mysqldata/mysql-bin.000001 | mysql -uroot -p111111
主从复制(前提:主库和从库数据一致)
主从复制的原理
主库 从库
1.打开binlog日志vi /data/3306/my.cnf
1.打开中继日志(relay-bin)
2.创建主从复制账号(mysql -uroot -p111111 -S /data/3306/mysql.sock) 2.激活主从复制 start slave;
3.建立用于从库复制的账号yunjisuan
grant replication slave on . to ‘yunjisuan’@‘192.168.0.%’ identified by ‘yunjisuan123’; 3.主从复制验证信息(主库的IP )
4.刷新权限(flush privileges; ) 4.server id =5
MySQL从库连接主库的配置:
CHANGE MASTER TO MASTER_HOST=‘192.168.0.200’,MASTER_PORT=3306,
MASTER_USER=‘yunjisuan’,MASTER_PASSWORD=‘yunjisuan123’,
MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=533;
masterinfo (记录验证信息和二进制文件位置信息)/data/3307/data/master.info
清除主从复制 reset slave all;
测试主从复制配置情况
mysql -uroot -p111111 -S /data/3307/mysql.sock -e “show slave status\G”
主从同步是否成功,最关键的为下面的3项状态参数:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
索引的作用
1.降低数据库的IO成本
2.加快表与表之间的的连接
索引的分类(五种)
1)普通索引 2)唯一索引 3)主键(特殊的唯一索引)
4)全文索引 5)单列索引与多列索引
事务
事务的四个属性
1)原子性(Atomicity)
2)一致性(Consistency)
3)隔离性(Isolation)
4)持久性(Durability)
begin开启事务
查看系统内置变量
show variables like ‘autocommit’;
出现此情况
1.vim /etc/my.cnf #log-bin=mysql-bin(注释了就可以了)
2.删除mysql-bin.index
cd /usr/local/mysql/data