Top

NSD DBA2 DAY04

  1. 案例1:测试MHA集群
  2. 案例2:视图的基本使用
  3. 案例3:视图进阶操作

1 案例1:测试MHA集群

1.1 问题

  • 查看MHA集群状态
  • 测试节点之间的SSH登录
  • 测试集群VIP的故障切换功能

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:验证配置

1)检查配置环境,在主机52,53检查是否有同步数据的用户repluser

主机52:

  1. mysql> select user,host from mysql.user where user="repluser";
  2. +----------+------+
  3. | user | host |
  4. +----------+------+
  5. | repluser | % |
  6. +----------+------+
  7. 1 row in set (0.00 sec)
  8. mysql> show grants for repluser@"%";
  9. +--------------------------------------------------+
  10. | Grants for repluser@% |
  11. +--------------------------------------------------+
  12. | GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
  13. +--------------------------------------------------+
  14. 1 row in set (0.00 sec

主机53:

  1. mysql> select user,host from mysql.user where user="repluser";
  2. +----------+------+
  3. | user | host |
  4. +----------+------+
  5. | repluser | % |
  6. +----------+------+
  7. 1 row in set (0.00 sec)
  8. mysql> show grants for repluser@"%";
  9. +--------------------------------------------------+
  10. | Grants for repluser@% |
  11. +--------------------------------------------------+
  12. | GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |

+--------------------------------------------------+

  1. 1 row in set (0.00 sec)

2)在51的主机上做root的授权,其他的会同步(如果不做,在验证数据节点的主从同步配置时会出错)

  1. mysql> grant all on *.* to root@"%" identified by "123456";
  2. mysql> select user,host from mysql.user where user="root";
  3. +------+-----------+
  4. | user | host |
  5. +------+-----------+
  6. | root | % |
  7. | root | localhost |
  8. +------+-----------+
  9. 2 rows in set (0.00 sec)

3)验证ssh 免密登陆数据节点主机

  1. [root@mgm56 mha4mysql-manager-0.56]# cd /usr/local/bin/
  2. [root@mgm56 bin]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
  3. Wed Sep 19 09:09:33 2018 - [info] All SSH connection tests passed successfully.
  4. //出现这个为成功

4)验证数据节点的主从同步配置(先把自动failover时候的切换脚本注释掉)

  1. [root@mgm56 bin]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
  2. MySQL Replication Health is OK. //验证成功

5)启动管理服务MHA_Manager

--remove_dead_master_conf //删除宕机主库配置

--ignore_last_failover //忽略xxx.health文件

  1. [root@mgm56 bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \
  2. --remove_dead_master_conf --ignore_last_failover
  3. Wed Sep 19 09:24:41 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  4. Wed Sep 19 09:24:41 2018 - [info] Reading application default configuration from /etc/mha_manager/app1.cnf..
  5. Wed Sep 19 09:24:41 2018 - [info] Reading server configuration from /etc/mha_manager/app1.cnf..

6)查看状态(另开一个终端)

  1. [root@mgm56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
  2. app1 (pid:15745) is running(0:PING_OK), master:192.168.4.51

7)停止服务

  1. [root@mgm56 ~]# masterha_stop --conf=/etc/mha_manager/app1.cnf
  2. Stopped app1 successfully.

步骤二:测试故障转移

1)在主库51上面配置VIP地址

  1. [root@master51 ~]# ifconfig eth0:1 192.168.4.100/24

2)在配置文件里面把自动failover时候的切换脚本去掉注释

3)修改 master_ip_failover 脚本,设置如下内容

  1. 34 my $vip = '192.168.4.100/24';
  2. 35 my $key = "1";
  3. 36 my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
  4. 37 my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

4)启动服务

  1. [root@mgm56 bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \
  2. --remove_dead_master_conf --ignore_last_failover
  3. Wed Sep 19 09:50:33 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  4. Wed Sep 19 09:50:33 2018 - [info] Reading application default configuration from /etc/mha_manager/app1.cnf..
  5. Wed Sep 19 09:50:33 2018 - [info] Reading server configuration from /etc/mha_manager/app1.cnf..

5)查看状态

  1. [root@mgm56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
  2. app1 master is down and failover is running(50:FAILOVER_RUNNING). master:192.168.4.52

验证数据节点的主从同步配置报错,如图-3所示:

  1. [root@mgm56 bin]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

图-3

解决办法:

root用户没有授权,默认只能本地连接,在主机51上面授权root用户可以远程登录,其他主机会同步

  1. mysql> grant all on *.* to root@"%" identified by "123456";

2 案例2:视图的基本使用

2.1 问题

  • 把/etc/passwd文件的内容存储到db9库下的user表里
  • 添加新字段id 存储记录的行号(在所有字段的前边)
  • 创建视图v1 结构及数据user表的字段、记录一样。
  • 创建视图v2 只有user表shell是/bin/bash用户信息 。
  • 分别对视图表和基表执行insert update delete 操作。
  • 删除视图v1 和 v2

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:视图的基本使用

什么是视图:是一种虚拟存在的表

内容与真实的表相似,包含一系列带有名称的列和行数据。

视图并不在数据库中以存储的数据的形式存在。

行和列的数据来自定义视图时查询所引用的基本表,并且在具体引用视图时动态生成。

更新视图的数据,就是更新基表的数据

更新基表数据,视图的数据也会跟着改变

1)把/etc/passwd文件的内容存储到db9库下的user表里

  1. [root@mysql51 ~]# mysql -u root -p123456
  2. mysql> create database db9;
  3. Query OK, 1 row affected (10.00 sec)
  4. mysql> create table db9.user(username char(20),password char(1),uid \
  5. int(2),gid int(2),comment char(100),homedir char(100),shell char(50));
  6. //创建存储数据的表结构
  7. Query OK, 0 rows affected (0.02 sec)
  8. [root@mysql51 ~]# cp /etc/passwd /var/lib/mysql-files/
  9. [root@mysql51 ~]# ls /var/lib/mysql-files/
  10. passwd
  11. mysql> load data infile "/var/lib/mysql-files/passwd" into table db9.user fields terminated by ":" lines terminated by "\n";//导入文件内容到db9.user
  12. Query OK, 41 rows affected (0.02 sec)
  13. Records: 41 Deleted: 0 Skipped: 0 Warnings: 0

2)添加新字段id 存储记录的行号(在所有字段的前边)

  1. mysql> alter table db9.user add id int(2) primary key auto_increment first;
  2. Query OK, 0 rows affected (0.04 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> use db9;
  5. mysql> desc user;
  6. +----------+-----------+------+-----+---------+----------------+
  7. | Field | Type | Null | Key | Default | Extra |
  8. +----------+-----------+------+-----+---------+----------------+
  9. | id | int(2) | NO | PRI | NULL | auto_increment |
  10. | username | char(20) | YES | | NULL | |
  11. | password | char(1) | YES | | NULL | |
  12. | uid | int(2) | YES | | NULL | |
  13. | gid | int(2) | YES | | NULL | |
  14. | comment | char(100) | YES | | NULL | |
  15. | homedir | char(100) | YES | | NULL | |
  16. | shell | char(50) | YES | | NULL | |
  17. +----------+-----------+------+-----+---------+----------------+
  18. 8 rows in set (0.00 sec)

3)创建视图v1 结构及数据user表的字段、记录一样

  1. mysql> create view v1 as select * from user;
  2. Query OK, 0 rows affected (0.00 sec)

4)创建视图v2 只有user表shell是/bin/bash用户信息

  1. mysql> create view v2 as select shell from user;
  2. Query OK, 0 rows affected (0.01 sec)

5)分别对视图表和基表执行insert update delete 操作

  1. mysql> insert into v1(username,uid) values("jarry",9);//插入记录
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> update v1 set uid=9 where username="adm";//更新记录
  4. Query OK, 1 row affected (0.01 sec)
  5. Rows matched: 1 Changed: 1 Warnings: 0
  6. mysql> delete from v1 where uid=9;//删除记录
  7. Query OK, 2 rows affected (0.01 sec)

6)删除视图v1 和 v2

  1. mysql> drop view v1;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> drop view v2;
  4. Query OK, 0 rows affected (0.00 sec)

注意:对视图操作即是对基本操作,反之亦然!!!

3 案例3:视图进阶操作

3.1 问题

  • 练习OR REPLACE的选项使用
  • 练习WITH LOCAL CHECK OPTION 选项的使用
  • 练习WITH CASCADED CHECK OPTION 选项的使用

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:视图进阶操作

1)创建视图完全格式

  1. mysql> create table user2 select username,uid,gid from user limit 3;
  2. //快速建表(user2表)
  3. Query OK, 3 rows affected (0.01 sec)
  4. Records: 3 Duplicates: 0 Warnings: 0
  5. mysql> create table info select username,uid,homedir,shell from user limit 5;
  6. //快速建表(info表)
  7. Query OK, 5 rows affected (0.02 sec)
  8. Records: 5 Duplicates: 0 Warnings: 0

查询user2.username=info.username的字段

  1. mysql> select * from user2 left join info on user2.username=info.username;
  2. +----------+------+------+----------+------+---------+---------------+
  3. | username | uid | gid | username | uid | homedir | shell |
  4. +----------+------+------+----------+------+---------+---------------+
  5. | root | 0 | 0 | root | 0 | /root | /bin/bash |
  6. | bin | 1 | 1 | bin | 1 | /bin | /sbin/nologin |
  7. | daemon | 2 | 2 | daemon | 2 | /sbin | /sbin/nologin |
  8. +----------+------+------+----------+------+---------+---------------+
  9. 3 rows in set (0.00 sec)

2)关联查询建的视图 默认不允许修改视图字段的值

  1. mysql> create view v4 as select * from user2 left join info on user2.username=info.username;//创建失败
  2. ERROR 1060 (42S21): Duplicate column name 'username'
  3. mysql> create view v4 as select a.username as ausername,b.username as busername, a.uid as auid,b.uid as buid from user2 a left join info b on a.username=b.username;
  4. //创建成功
  5. Query OK, 0 rows affected (0.00 sec)
  6. mysql> select * from v4;
  7. +-----------+-----------+------+------+
  8. | ausername | busername | auid | buid |
  9. +-----------+-----------+------+------+
  10. | root | root | 0 | 0 |
  11. | bin | bin | 1 | 1 |
  12. | daemon | daemon | 2 | 2 |
  13. +-----------+-----------+------+------+
  14. 3 rows in set (0.00 sec)
  15. mysql> desc v4;
  16. +-----------+----------+------+-----+---------+-------+
  17. | Field | Type | Null | Key | Default | Extra |
  18. +-----------+----------+------+-----+---------+-------+
  19. | ausername | char(20) | YES | | NULL | |
  20. | busername | char(20) | YES | | NULL | |
  21. | auid | int(2) | YES | | NULL | |
  22. | buid | int(2) | YES | | NULL | |
  23. +-----------+----------+------+-----+---------+-------+
  24. 4 rows in set (0.00 sec)

3)OR REPLACE的选项使用

创建时,若视图已存在,会替换已有的视图

语法格式:create or replace view视图名as select 查询; //达到修改已有视图的目的

  1. mysql> create or replace view v4 as select a.username as ausername,b.username as busername, a.uid as auid,b.uid as buid from user2 a left join info b on a.username=b.username;
  2. Query OK, 0 rows affected (0.00 sec)

4)WITH LOCAL CHECK OPTION

LOCAL和CASCADED关键字决定检查的范围

LOCAL 仅检查当前视图的限制

CASCADED 同时要满足基表的限制(默认值)

  1. mysql> create table user1 select username,uid,shell from user where uid>=5 and uid <=40;
  2. Query OK, 11 rows affected (0.01 sec)
  3. Records: 11 Duplicates: 0 Warnings: 0
  4. mysql> create view v1 as select username,uid from user1 where uid<=20;
  5. Query OK, 0 rows affected (0.01 sec)
  6. mysql> update v1 set uid=21 where username="sync";
  7. //操作超过视图表的条件限制(uid<=20)之后,在视图表里面查看不到,在基表里可以查看到
  8. Query OK, 1 row affected (0.01 sec)
  9. Rows matched: 1 Changed: 1 Warnings: 0
  10. mysql> update user1 set uid=41 where username="ftp";
  11. //基表在超过条件限制(uid>=5 and uid <=40),在基表里依然可以查看到
  12. Query OK, 1 row affected (0.00 sec)
  13. Rows matched: 1 Changed: 1 Warnings: 0
  14. mysql> create table a select * from user where uid < 10;
  15. //快速创建一个新表a
  16. Query OK, 7 rows affected (0.01 sec)
  17. Records: 7 Duplicates: 0 Warnings: 0
  18. mysql> create view v3 as select * from a where uid < 10 with check option;
  19. //不写默认为CASCADED检查自己和a要满足的要求即可
  20. Query OK, 0 rows affected (0.00 sec)
  21. mysql> update v3 set uid=9 where username="adm";//更改成功
  22. Query OK, 0 rows affected (0.01 sec)
  23. Rows matched: 0 Changed: 0 Warnings: 0
  24. mysql> create view v2 as select * from v1 where uid >= 5 with local check option;
  25. //满足自身v2的要求
  26. Query OK, 0 rows affected (0.00 sec)
  27. mysql> update v2 set uid=9 where username="sync";
  28. Query OK, 0 rows affected (0.00 sec)
  29. Rows matched: 0 Changed: 0 Warnings: 0

5)WITH CASCADED CHECK OPTION

  1. mysql> create view v5 as select * from v1 where uid >= 5 with cascaded check option;
  2. Query OK, 0 rows affected (0.00 sec)
优质内容筛选与推荐>>
1、Java引进和应用的包装类
2、APPlication,Session,Cookie,ViewState和Cache之间的区别
3、功能完善的Java连接池调用实例
4、Java HashMap, Hashtable, TreeMap, WeakHashMap总结
5、导航全局滑动JavaScript


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn