PXC 、 MySQL存储引擎

1 PXC集群 71 72 73
1pxc软件介绍
2pxc特点
3拓扑结构
4构建pxc集群
4.1 在所有服务器安装pxc软件(71/72/73)
]#cd pxc
]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm //安装依赖
]# yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
]# rpm -ivh qpress-1.1-14.11.x86_64.rpm //安装依赖
]# tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
]# yum -y install Percona-XtraDB-Cluster-*.rpm
]# ls /etc/percona-xtradb-cluster.conf.d/
mysqld.cnf mysqld_safe.cnf wsrep.cnf

		4.2 在3台数据库服务器分别修改配置文件

]# cd /etc/percona-xtradb-cluster.conf.d/
71】# vim mysqld.cnf
server-id=71
:wq

72】#vim mysqld.cnf
server-id=72
:wq

73】# vim mysqld.cnf
server-id=73
:wq

71】# vim wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.71
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxc-cluster-node-71
39 wsrep_sst_auth=“sstuser:123qqq…A”
:wq

72】#vim wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.72
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxc-cluster-node-72
39 wsrep_sst_auth=“sstuser:123qqq…A”
:wq

73】# vim wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.73
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxc-cluster-node-73
39 wsrep_sst_auth=“sstuser:123qqq…A”
:wq

4.3 在任意1台数据库服务器初始化集群
注意:关闭3台数据库服务器的 selinux 和 firewalld
[root@pxcnode71 ~]#systemctl start mysql@bootstrap.service
[root@pxcnode71 ~]# netstat -utnlp | grep 3306
tcp6 0 0 :::3306 ::😗 LISTEN 8502/mysqld
[root@pxcnode71 ~]# netstat -utnlp | grep 4567
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 8502/mysqld
[root@pxcnode71 ~]# ls /var/log/mysqld.log
/var/log/mysqld.log
[root@pxcnode71 ~]# grep password /var/log/mysqld.log
2020-08-26T14:22:55.211844Z 1 [Note] A temporary password is generated for root@localhost: qkJwa%qAb0N=
[root@pxcnode71 ~]# mysql -uroot -p’qkJwa%qAb0N=’
mysql> alter user root@“localhost” identified by “123456”;
Query OK, 0 rows affected (0.08 sec)

mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.00 sec)

mysql> grant reload,lock tables,replication client,process on . to sstuser@“localhost” identified by “123qqq…A”;
mysql> exit
Bye
[root@pxcnode71 ~]# mysql -uroot -p123456
mysql> show databases;
mysql> exit
[root@pxcnode71 ~]# mysql -usstuser -p123qqq…A #测试授权用户sstuser

		4.4 启动另外2台主机的数据库服务

[root@pxcnode72 ~]#systemctl start mysql

		4.5 查看数据库服务器状态

[root@pxcnode72 ~]# yum -y install net-tools
[root@pxcnode72 ~]#netstat -utnlp | grep 3306
[root@pxcnode72 ~]#netstat -utnlp | grep 4567
[root@pxcnode72 ~]#mysql -uroot -p123456
mysql> select user from mysql.user where user=“sstuser”;

[root@pxcnode73 ~]# yum -y install net-tools
[root@pxcnode73 ~]#netstat -utnlp | grep 3306
[root@pxcnode73~]#netstat -utnlp | grep 4567
[root@pxcnode73 ~]#mysql -uroot -p123456
mysql> select user from mysql.user where user=“sstuser”;

		4.6 查看主机的集群状态

show status like “%wsrep%”;

排错方法:
查看日志报错信息 grep -i “error” /var/log/mysqld.log

启动失败的原因:
检查修改的配置文件 mysqld.conf 和 wsrep.conf
没有关闭所有数据库服务器的 selinux 和 firewalld

重新初始化集群
]#rm -rf /var/lib/mysql/*
]#systemctl start mysql@bootstrap.service

启动mysql服务
]#rm -rf /var/lib/mysql/*
]#systemctl start mysql

71 初始化失败 解决 办法
71]#
rm -rf /var/lib/mysql/*
rm -rf /etc/percona-xtradb-cluster.conf.d/mysqld_safe.cnf
systemctl start mysql@bootstrap.service

或者

先把mysql的进程杀了,然后把/var/lib/mysql下面又清了一遍,删了一下mysqld_safe.cnf 再执行 初始化

		4.7 客户端连接集群中的任意主机存取数据
			4.7.1 在任意1台数据库服务器添加用户给客户端连接使用,另外2台会自动同步添加的用户到本机

[root@pxcnode73 ~]# mysql -uroot -p123456 -e ‘grant all on bbsdb.* to yaya@"%" identified by “123456”’
[root@pxcnode71 ~]# mysql -uroot -p123456 -e ‘show grants for yaya@"%"’
mysql: [Warning] Using a password on the command line interface can be insecure.
±------------------------------------------------+
| Grants for yaya@% |
±------------------------------------------------+
| GRANT USAGE ON . TO ‘yaya’@’%’ |
| GRANT ALL PRIVILEGES ON bbsdb.* TO ‘yaya’@’%’ |
±------------------------------------------------+
[root@pxcnode71 ~]#
[root@pxcnode72 ~]# mysql -uroot -p123456 -e ‘show grants for yaya@"%"’
mysql: [Warning] Using a password on the command line interface can be insecure.
±------------------------------------------------+
| Grants for yaya@% |
±------------------------------------------------+
| GRANT USAGE ON . TO ‘yaya’@’%’ |
| GRANT ALL PRIVILEGES ON bbsdb.* TO ‘yaya’@’%’ |
±------------------------------------------------+
[root@pxcnode71 ~]#

[root@host50 ~]# mysql -h192.168.4.71 -uyaya -p123456 -e ‘create database bbsdb’
[root@host50 ~]# mysql -h192.168.4.71 -uyaya -p123456 -e ‘create table bbsdb.b(id int primary key auto_increment , name char(10))’

[root@host50 ~]# mysql -h192.168.4.72 -uyaya -p123456 -e ‘insert into bbsdb.b(name)values(“bob”)’
[root@host50 ~]# mysql -h192.168.4.73 -uyaya -p123456 -e ‘insert into bbsdb.b(name)values(“tom”)’

[root@host50 ~]#
[root@host50 ~]# mysql -h192.168.4.71 -uyaya -p123456 -e ‘select * from bbsdb.b’

		4.8 测试集群的高可用

停止集群中任意1台主机的数据库服务,都不会影响到另外2台主机
[root@pxcnode71 ~]# systemctl stop mysql@bootstrap.service
[root@pxcnode72 ~]# systemctl stop mysql
[root@host50 ~]# mysql -h192.168.4.73 -uyaya -p123456 -e ‘select * from bbsdb.b’
[root@host50 ~]# mysql -h192.168.4.73 -uyaya -p123456 -e ‘insert into bbsdb.b(name)values(“aaaa”)’

		4.9 测试服务器自动恢复 

[root@pxcnode71 ~]# systemctl start mysql
[root@pxcnode72 ~]# systemctl start mysql
[root@host50 ~]# mysql -h192.168.4.71 -uyaya -p123456 -e ‘select * from bbsdb.b’
[root@host50 ~]# mysql -h192.168.4.72 -uyaya -p123456 -e ‘select * from bbsdb.b’

2 MySQL存储引擎(难点)理解
2.1 什么是存储引擎(存储引擎介绍) 功能组件之一,访问表是希望使用MySQL的什么功能对表做处理,就调用对应的存储引擎就可以了。

innodb
2 2 MySQL服务的体系结构

2 2 MySQL服务的体系结构(由8部分组成)
组件的名称和功能介绍
1 连接池 检查硬件资源 和 用户访问权限

	2 管理工具  安装mysql服务软件后自带的安装命令  mysql   mysqladmin    mysqldump   mysqlbinlog  

	3  sql接口  把执行的SQL命令 发送给mysql服务的进程处理
	4  分析器    分析执行的SQL命令的语法格式和访问的数据是否有权限
	5  优化器    对执行的SQL命令优化处理

	6  缓存空间  查询缓存,存储曾经查找过的数据,存储空间从物理划分的

默认 MySQL服务查询缓存没有开启。

	7 存储引擎,访问表中的数据时,会根据表使用的存储引擎,对数据做不同的处理,每种存储引擎都有各自的功能和数据存储方式。建表时可以根据需要指定表使用的存储引擎。(存储引擎,就是MySQL服务提供的各自功能)

	8 文件系统  数据库服务器的硬盘(文件系统类型 ext2/3/4 、   xfs )



2.3 MySQL服务处理查询访问的过程
    1  客户端 ------> 数据库服务器
	2  执行select 命令
	3  MySQL服务 先访问 查询缓存 如果有数据 直接在查询缓存提前数据回复客户端,反之, 到硬盘里查找数据,把找到的数据 先 保存到查询缓存 再回复给客户端.


2.4 存储引擎管理
	查看数据库服务默认使用的存储引擎

mysql> show engines;

	查看已有表使用的存储引擎

mysql> show create table 库.表 \G
mysql> show create table db1.t10 \G

	修改数据库服务默认使用的存储引擎

]# vim /etc/my.cnf
[mysqld]
default-storage-engine=“myisam”
:wq
[root@host50 ~]# systemctl restart mysqld
[root@host50 ~]# mysql -uroot -p123qqq…A -e ’ create table db1.a2(id int)’

[root@host50 ~]# mysql -uroot -p123qqq…A -e ‘show create table db1.a2 \G’
*************************** 1. row ***************************
Table: a2
Create Table: CREATE TABLE a2 (
id int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
[root@host50 ~]#

    修改已有表使用的存储引擎
	alter  table  table  库.表  engine=新存储引擎名;	

	建表时,设置表使用的存储引擎
	create  table  库.表(字段列表)engine=存储引擎名;
	mysql> create table db1.c1 (id  int )engine=innodb;


执行查询select数据和存储insert数据的命令时都会对表做访问,根据表使用的存储引擎做不同的处理,每种存储引擎有各自的功能和数据存储方式。

2.5 常用存储引擎特点介绍 (理论)
2.5.1 myisam特点
支持表级锁
不支持外键 事务 事务回滚
每张对应3个表文件
.frm .MYI .MYD
表结构 index 数据
desc 库.表 createt index select * from 库.表

	2.5.2 innodb特点
		支持外键  支持事务 支持事务回滚  支持行级锁
		每张对应2个表文件
		    .frm	      .ibd
		    表结构            index+数据
		   desc 库.表
       专业术语?
      锁        : 加锁的目的 是为了解决 数据并发访问的冲突问题。
       锁粒度:表级锁  行级锁
	表级锁:只要是对表做select 或insert 访问 会把整张表锁上,锁了之后不允许其他的任何访问,只有锁被释放后才会允许其他的访问

	行级锁:对表做select 或insert 访问,仅仅对被访问的行分别加锁,没有被访问的行,不会加所有,允许其他的连接访问。
    锁类型:读锁  和 写锁
	读锁:对表执行select 访问 时加读锁,又叫共享锁,如果在加读锁期间有其他客户端也对表执行select 访问,是允许的,但insert 不允许。

	写锁: 对表做insert 访问时加写锁。又叫排它锁 ,如果在加写锁期间不允许任何连接对表做select 或insert。

pc1 update db1.user set name=“xxx” where id=1;
pc2 update db1.user set name=“yyy” where id=1;

	事务? 连接数据库服务成功     各种执行各种操作命令   断开连接
				     库.表(innodb)						0  1 2 3 4
	使用事务日志文件记录对innodb存储引擎的表执行的sql操作。
	cd  /var/lib/mysql/
	ib_logfile0   ib_logfile1   ibdata1
	
	事务回滚: 在执行的各种操作命令时,任意一步操作失败,把数据恢复到失败之前的状态。

	事务的特点(ACID)
		原子性   一致性   隔离性    持久性
	事务特点演示? 

连接1
create table db3.user2(id int)engine=innodb;
set autocommit=off;
insert into db3.user2 values(111);
select * from db3.user2; 自己能看到

连接2
select * from db3.user2; 看不到

连接3
select * from db3.user2;看不到

连接1 commit; 提交

连接2
select * from db3.user2; 看到

连接3
select * from db3.user2;看到

连接1
delete from db3.user2;

连接2
select * from db3.user2; 看到

连接3
select * from db3.user2;看到

连接1
insert into db3.user2 values(8888);

连接2
select * from db3.user2; 看不到

连接3
select * from db3.user2;看不到

连接1 select * from db3.user2; 看到
rollback;
select * from db3.user2; 看到 插入和删除 之前的数据

连接1 delete from db3.user2;
commit;
连接2
select * from db3.user2; 看不到

连接3
select * from db3.user2;看不到

2.6 建表时,如何决定表使用哪种存储引擎?
接受查询select访问多的表,适合使用myisam存储引擎,节省系统的硬件资源
接受写(insert update delete)访问多的表,适合使用innodb存储引擎,并发访问量大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值