触发器
触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL
也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。
注意:mysql语法以;为结束符,先修mysql定界符
DELIMITER $
记得最后修改回来 DELIMITER;
语法
查看触发器
SHOW TRIGGERS
删除触发器
1 | DROP TRIGGER |
创建触发器
1 | CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. |
1 | DELIMITER $ |
示例
新建表
1 | CREATE TABLE `t_a` ( |
1 | CREATE TABLE `t_b` ( |
insert 操作
1 | create trigger t1 |
update 操作
1 | # Trigger触发后,当t_a表groupid,username数据有更改时,对t_b表同步一条更新后的数据 |
delete 操作
1 | create trigger t3 |
存储过程
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。
基本语法
查看
1 | show procedure status; //存储过程 |
创建
1 | create procedure p1 () |
删除
1 | drop procedure if exists p1; |
in/out/inout(不常用)
in
1 | create procedure p3(in n int) |
out
1 | create procedure p5(in pid int, out name VARCHAR(20)) |
游标
概念
1 | # declare 声明变量,set赋值变量 |
NOT FOUND 事件触发[exit]
1 | create procedure p9() |
NOT FOUND 事件触发[continue]
1 | create procedure p10() |
mysql权限管理
mysql.user表
1 | #创建test用户授权所有数据库和表 |
主从复制
关闭防火墙
1 | systemctl stop firewalld.service #停止firewall |
主服务器(192.168.2.135)(vim /etc/my.conf)
1 | # 这个101是唯一标识你这个mysql服务器的,一般取你电脑ip的最后几位,以便好区分。 |
查看主服服务器状态:show master status
从服务器(192.168.2.136)(vim /etc/my.conf)
1 | server-id = 135 |
查看从服务器状态:show slave status
主从关联
授权(读取主服务器二进制文件)
1 | grant replication client,replication slave on *.* to repl@'192.168.2.%' identified by 'MyPassSui666*'; |
从服务器操作
1 | change master to master_host='192.168.2.135', |
启动:start slave;(一定要启动!!!!!)
查看状态:show slave status \G;
注意
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
mysql5.6后的复制引入了uuid的概念,各个复制结构中的server_uuid得保证不一样,但是查看到直接copy data文件夹后server_uuid是相同的,
‘show variables like ‘%server_uuid%’;
解决方法:
找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可1
find / -name auto.cnf
出现2个yes主从成功,主服务器操作同步到从服务器;