准备集群环境:
一主多从 : 半同步复制 禁用自动删除中继日志文件
ssh秘钥对认证登陆: 56-->(51-55) 51<->55
所有数据库服务器 要给管理主机添加监控时的连接用户
grant all on *.* to root@"%" identified by "123qqq...A";
在所有主机上安装mha软件依赖的perl软件包
配置高可用集群:
数据库服务器(51-56)
安装mha_node软件包
管理主机(56)
安装mha_node和mha_manager软件包
创建管理命令
编写主配置文件 app1.cnf (定义56主机本机的配置 指定数据库服务器)
[server default] [serverX]
创建vip地址切换脚本 chmod +x master_ip_failover
定义VIP地址
VIP地址部署在那块网卡上
测试配置文件:
masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
masterha_check_repl --conf=/etc/mha_manager/app1.cnf
启动管理服务:
masterha_manager --conf=/etc/mha_manager/app1.cnf
查看服务状态:
masterha_status --conf=/etc/mha_manager/app1.cnf
测试集群:
1 客户端连接VIP地址访问数据库服务。能够存取数据。
2 测试高可用
3 把坏掉的主库添加到集群里:运行数据库服务器 手动指定为当前主库的从库。在app1.cnf文件里添加主机信息 启动管理服务
+++++++++++++++++++++++++++++++++++
休息到 9:50
DBA2_day04
MySQL视图
先准备环境:导入一个表数据:
[root@host50 ~]# mkdir /mydata
[root@host50 ~]# chown mysql /mydata
[root@host50 ~]# vim /etc/my.cnf
[root@host50 ~]# systemctl restart mysqld
[root@host50 ~]# mysql -uroot -p123456
mysql> create database nsd;
mysql> create table user(name char(50),
-> password char(2),
-> uid int(2),
-> gid int(2),
-> comment varchar(160),
-> homedir char(150),
-> shell char(50)); 视图不能创建索引)
load data infile "/mydata/passwd" into table nsd.user fields terminated by ":" lines terminated by "\n";
mysql> alter table user add id int(2) primary key auto_increment first;
基本使用:
创建视图?
create view 视图名称 (字段名列表) as sql查询;
create view 视图名 as SQL查询;
查看创建视图具体命令:show create view 视图名;
查看视图:查看当前库下所有表的状态信息:show table status;
show table status where comment="view" \G;
使用视图:
查询记录:select 字段名列表 from 视图名 where 条件;
插入记录:insert into 视图名(字段名列表) values(字段值列表);
更新记录:update 视图名 set 字段名=值 where 条件;
删除记录:delete from 视图名 where 条件;
删除视图:drop view 视图名;
create view v1 (创建视图)
as
select name,uid,shell,homedir from user;
create view v2(vname,vuid,vshell,abc)
as
select name,uid,shell,homedir from user;
show tables;
drop view v1;
> create table t1 select name,uid,shell from user limit 3 ;
> create table t2
select name,uid,homedir,gid from user limit 6;
select * from t1 left join t2 on
t1.name=t2.name and t1.uid = t2.uid; (左连接查询)
create view v3 as select * from t1 left join t2 on (字段名不能一样,得改名)
t1.name=t2.name and t1.uid = t2.uid;
create view v3 as select t1.* from t1 left join t2 on
t1.name=t2.name and t1.uid = t2.uid;
休息到 11:05
创建视图时,给视图表里的字段定义别名。
create view v3
as
select t1.name as aname , t2.name as bname , t1.uid as auid , t2.uid as buid from t1 left join t2 on t1.uid=t2.uid; (不给表名取别名,就要写表名)
create view v4 as select
a.name as aname , b.name as bname , a.uid as auid , b.uid as buid from t1 a left join t2 b on a.uid=b.uid; (给t1,t2表取别名,前面写别名就可以)
重要选项说明
创建视图已存在时,会替换已有的视图:create or replace view 视图名 as select 查询;
创建视图时,忽略已有的视图
create view v3 as select name,uid from user;
create or replace view v3 as select name,uid from user; (替换已有视图)
create table nsd.user(name char(50),
-> password char(1),
-> uid int(2),
-> gid int(2),
-> comment varchar(150),
-> homedir char(160),
-> shell char(50));
create table user2 select id,name,password,homedir from user where uid <=40;
create view v6 as select * from user2 where id<=10 with check option; (with check option支持检查选项)
mysql> show create table v6;
mysql> update v6 set id=10 where name="root"; (修改的值必须符合自己的条件,否者不行)
create view v3 as select name,uid from user with check option;
with check option
重要选项说明(2)
local和cascaded关键字决定检查的范围
local 仅检查视图的创建条件。(仅检查当前视图的限制)
CASCADED 同时要满足基表的限制(默认值)
mysql> create table user2 select id,name,password,homedir from user where uid <=40;
mysql> select * from user2;
mysql> create view v6
-> as
-> select * from user2 where id<=10
-> with check option;
update v6 set id=9 where name="root";
select * from v6;
mysql> create view v7
-> as
-> select name,id,password from user2 where id<=18;
select * from v7;
create view v17 as
select name,id,password from v7 where id >=10 (既要满足基表又要满足视图)
with check option;
select * from v17;
update v17 set id=20 where name="rpc";
update v17 set id=15 where name="rpc";
select * from v7;
select * from v17;
select * from user2;
休息到 15:05
create view v18 as
select name,id,password from v7 where id >=10
with local check option;
update v18 set id=20 where name="rpc";
select * from v18;
select * from v7;
select * from user2;
++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++
MySQL存储过程: MySQL服务里的脚本
创建存储过程:
语法格式:mysql>delimiter //
create procedure 名称() 例:create procedure p1() (存储过程名小括号里没参数可以不写,有参数必须写)
begin begin (后面开始写功能代码)
功能代码 select * from p1 库名。表名 where name="root";
end end
// 结束存储过程 //
delimiter; delimider
注:(delimider关键字用来指定存储过程的分隔符(默认为;)
若没有指定分隔符,编译器会把存储过程当sql语句进行处理,从而执行出错
delimiter //
create procedure p1()
begin
select count(name) from db9.user;
end
//
delimiter ;
查看存储过程
方法1:show procedure status;
方法2:select db,name,type from mysql.proc where name="存储过程名";
mysql> select db,name,type,body from mysql.proc
mysql> select db,name,type,body from mysql.proc where name="p1"\G;
call p1;
call p1();
调用/删除存储过程
调用:call 存储过程名();
删除存储过程:drop procedure 存储过程名;
mysql> drop procedure p1;
存储过程优点:1,提高性能 2,可减轻网络负担 3, 可以防止对表的直接访问 4, 避免重复编写sql操作
存储过程介绍:存储过程,相当于是mysql语句组成的脚本,指的是数据库中保存的一系列sql命令的集合,
可以在存储过程中使用变量,条件判断,流程控制等。
delimiter //
create procedure p1()
begin
select count(name) from user where shell="/bin/bash"; (统计/bin/bash/个数)
end
//
delimiter ;
call p1;
休息到 16:00
MySQL变量
系统环境 :
会话变量 全局变量
show session variables; show global variables;
调用局部变量时,变量名前不需要加@
会话变量,全局变量:会话变量和全局变量叫系统变量,使用set命令定义全局变量的修改回影响到整个服务器,但是对会话变量的修 改, 只会影响当前的会话。 select @@hostname;
用户变量:在客户端连接到数据库服务的整个过程都是有效的。当当前连接断开后所有用户变量失效。
定义set @变量名=值; 输出select @变量名;
局部变量:存储过程中的begin/end。其有效范围仅限于改语句块中,语句块执行完毕后,变量失效。
declare专门用来定义局部变量。
show global variables;(查看全局变量)
show session variables;(查看会话变量)
set session sort_buffer_size=4000; (设置会话变量)
show session variables like "sort_buffer_size"; (查看会话变量)
show global variables like "%关键字%";(查看全局变量)
select max(uid) into @y from user;(使用sql命令查询结果赋值)
用户变量:
mysql> set @name="yaya"; (用户自定义变量,直接赋值)
mysql> select @name;
局部变量:在存储过程里有效
declare @x=9;
set @x = 9;
delimiter //
create procedure p3()
begin
declare x int default 99; (局部变量) 局部变量不需要加@,不然变成自定义变量
declare name char(10);
set name = "bob";
select x , name; 局部变量只能用于begin和end之间
end
//
delimiter ;
call p2;
select @x;
++++++++++++++++++++++++++++++++++
存储过程参数类型 in out inout
参数类型:
调用参数时,名称前也不需要加@:create procedure 名称(类型 参数名 数据类型 ,类型 参数名 数据类型)
关键字 名称 描述
in 输入参数 作用是给存储过程传值,必须在调用存储过程时赋值,在存储过程中参数的值不允许修改;默认类型是in.
out 输出参数 该值可在存储过程内部被改变,并可返回。
inout 输出参数/输入 调用时指定,并且可被改变和返回
delimiter //
create procedure p4( in shellname char(20) ) (定义in类型的参数变量shellname)
begin
select count(name) from user where shell=shellname;
end
//
delimiter ;
call p4(); (不赋值不能)
call p4("/bin/bash"); (调用过程给值)
set @x = "/sbin/nologin"
call p4(@x);
休息到17:10
delimiter //
create procedure p7(out number int(2)) (定义out类型参数为number)
begin
set number = 9;
select number;
select count(id) into number from user;
select number;
end
//
delimiter ;
call p7(8);
select @w;
call p7(@w);
delimiter //
create procedure p2(shellname char(20))
begin
select count(shell) from user where shell=shellname;
end
//
delimiter ;
call p2("/bin/bash");
call p2("sync");
++++++++++++++++++++++++++
drop procedure if exists say; proceduer(过程) exists(存在)
delimiter //
create procedure say(in bash char(10),in nologin char(15),out x int(2), out y int(2))
begin
declare z int(2) ;
set z = 0;
select count(shell) into x from user where shell=bash;
select count(shell) into y from user where shell=nologin;
set z = x + y;
select z;
end
//
delimiter ;
delimiter //
create procedure p1()
begin
end
//
delimiter ;
流程控制
DBA2_DAY05 数据分片 50 51 52 53
游戏网站:
统计在线用户量
统计新注册的游戏账号
DBA
MySQL>