mysql用户授权

mysql:主从复制与分区技术
1.mysql用户授权
2.mysql bin-log日志
3.mysql 主从复制
4.mysql 分区技术


1.mysql用户授权 select user,host,password from mysql.user;
在192.168.7.145机器上面执行一下面:
grant all on *.* to wubo@192.168.7.146 identified by '123456'
在192.168.7.146机器上面可以登录192.168.7.145上面的myssql而且对192.168.7.145上面所有数据库和表都有权限
创建用户:create user wubo@IP identified by '123456' ;
给用户授予权限 grant add on *.* to wubo@IP identified by 'password'
远程登录mysql:mysql -uuser -ppassword -hIP database;

2.mysql bin-log日志
开启mysql日志
vim /etc/my.cnf
[mysql]
port=3306
log-error=musql.err(错误)
log=mysql-log(一般日志)
log-bin=mysql-bin(增删改的所有操作记录包括语句):主从数据库备份与还原的关键性文件,从数据库就是拷贝主数据库的mysql-bin日志文件
检查二进制log—-bin开启状态:show variables like "%log_bin%" 
flush logs:就是在生成一个新的log-bin日志包含此阶段的所有增删改操作
show master status/logs:查看最后一次日志/查看所有日志  
reset master:清空所有二进制日志文件
\s:查看系统的状态
delete table:删除内容不删除定义,不释放空间
truncate table:删除内容不删除定义,释放空间
drop table:删除内容和定义释放空间 
删除数据恢复:( 主要恢复备份之后到系统崩溃这段时间的数据)
mysql>show master status; 假如bin-log0001
mysql>flush logs;假如bin-log0002
mysql>truncate t1; 
mysqlbinlog bin-log0001 | mysql -uroot -p123456 test;

数据备份和恢复:
备份:mysqldump -uuser -ppassword database -l -F > /tmp/tst.sql
恢复:mysql -uuser -ppassword databses < /tmp/test.sql  只是恢复一个时间点
-l:读锁操作(就是在备份的时候不允许在写入数据保证数据的一致性和完整的快照)
-F:==flush logs

假如9点的时候备份一个,之后又开始操作到10点时候数据库崩溃。怎么恢复9点之前的数据和9点到10点之间的数据呢?
1.9点备份:mysqldump -uuser -ppassword database -l -F > /tmp/tst.sql(这个可以恢复但是9点后没有备份怎么恢复呢?)
2.开始操作:insert delete update等相关操作这时候会只要来气二进制mysql-bin日志就可以存在日志里面
3.为了不与之前的操作混在一起,此时生成一个新的二进制日志文件flush logs;步骤2的所有操作单独存在一个日志中
开始回复:
1.mysql -uuser -ppassword databses (-v -f)< /tmp/test.sql 此时恢复只是恢复9点之前的数据,9点后的数据由于没有备份是不会恢复的
-v:显示导入过程
-f:遇到错误可以skip过去继续执行下面的语句
2.mysqlbinlog mysql-bin000X日志的名字 | mysql -uuser -ppassword database;(恢复9点到10点之间的数据)
可以指定位置或是指定时间来恢复binlog日志里面的数据
 mysqlbinlog --no-defaults --start-position="50" --stop-position="100"(--start-date="2012-01-0121:17:01" --stop-date="2012-02-0121:17:01") mysql-bin000X | mysql -uuser -ppassword database;
 
3.mysql 主从复制:
1.如果主服务器出现问题,可以快速切换到从数据库提供服务
2.可以在从服务器上面进行查询,以减轻主服务器的压力(对实时性要求不高的,数据部频繁更改,增删改在主服务器,查询在从服务器读写分离实现负载均衡)
3.在从服务器上面进行备份,以便备份的时候影响主服务器的效率


远程登录mysqlerver修改:解决ERROR 2003 (HY000): Can't connect to MySQL server on "host" (111)  :/etc/mysql/my.cnf:#bind-address= 127.0.0.1  <---注释掉这一行就可以远程登录了


主从复制步骤:

1.登录mysql mysql -uroot -p12345 test
2.给服务授权用户 grant all on *.* to user@ip identified by 123456
3.修改主服务器的配置文件my.cnf
log-bin=mysql-bin
server-id
4.在主服务器上设置读锁,确保没有操作,目的获取一个完整的快照:flush tables with read lock;
5.查看主服务器上面的二进制日志文件和偏移量值:show master status;
6.目前主服务器的数据库已经停止的数据的更新操作,可以进行备份有2中方式
 1.cp全部数据
 2.musqlidump
7.主数据库备份结束后,主数据库可以恢复写操作,剩余的只需在从服务上面执行;unlock tables;
8.把主数据库备份的数据scp到从数据库上面进行恢复
show slave status \G;


4.mysql 分区技术(就是把大表分成小表)
查看数据库引擎:show engines;
查看当前数据库的插件:show  plugins;
分区类型:
range:类似与switch case1
list:固定值或是枚举类型
hash:
key:

列子hash:
create table t1(id int) engine=myisam partition by hash(id) partitions 5;  5个分区表 show table还是一张表
insert into table select * form t2:
watch -n1 -d ls -lh /var/lib/mysql/test

列子range:
create table t1(id int,c2 varchar(30),c3 date) engine=MyISAM
partition bu range (year(c3)) (
partition p1 values less than(1995),
partition p2 values less than(1996),
partition p3 values less than(1997),
partition p4 values less than(1998),
partition p5 values less than(1999),
partition p6 values less than maxvalue
);
插入800万条数据
create procedure p1()
begin
declare v int default 0;
while v < 8000000
do
insert into t1 values(v,'testing pratition range',adddate('1995-01-01',(rand(v)*36520) mod 36520));
set v=v+1;
end while;
end;
测试大约15分钟往分区表里面添加数据
之后往不是分区表里面添加800万数据insert into t2 select * from t1;大约20秒时间

查询测试分析:
t1:range分区表
t2:没有分区的表
select count(*) from t1 where c3 > date '1995-01-01' and c2 < date '1997-12-01'(0.16秒)
select count(*) from t2 where c3 > date '1995-01-01' and c2 < date '1997-12-01'(7秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值