搭建PXC 数据库高可用集群
PXC :Percona XtraDB Cluster
高可用集群
PXC 特点
1数据强一致性,无同步延时
2没有主从切换操作,无需使用虚拟ip
3支持innodb引擎
4多线程复制
5部署简单
6支持节点自动加入,无需手动拷贝数据
环境准备:三台主机
71 72 73
主要组成:Percona Server with XtraDB
Write set Repllication patches(同步多主复制插件)
官网http://galeracluter.com
Snapshot :快照
部署软件
9200:HA健康检查
vim /etc/hosts
配置域名解析
192.168.4.71 pxcnode1
192.168.4.72 pxcnode
cd PXC/
Rpm -ivh libev
Yun -y install percona-xtrabackup
Rpm -ivh qpress
Tar -xvf Percona-XtraDB-Cluster-5.7
Yum -y install percona-xtraDB-cluster
配置文件
所在目录:/etc/percona-xtradb-cluster.conf.d/
Mysqld.conf 数据库服务运行参数配置
Mysqld_safe.conf 5.7 配置文件
Wsrep.cnf PXC集群配置文件
(1)配置数据库库服务运行参数配置文件
Mysqld.conf
cd /etc/percona-xtradb-cluster.conf.d/
分别:
Vim mysqld.conf
Server_id=71\72\73
(2)
Vim Wsrep.cnf
wsrep_cli\uster_address=gcomm://192.168.4.71\72\73 -集群成员列表
Wsrep_node_address=192.168.4.71 -本机ip
Wsrep_cluster_name=pxc-cluster 默认必须相同 -集群名称
Wsrep_node_name=pxcnbode 71 -本机主机名
Wsrep_ssl_auth=”sstuser:123456” -sst数据同步授权用户
3重启集群服务
(1)Systemct start mysql@bootsrtap.service -重启
(2)Grep pass /var/log/mysqld.log -得到初始密码
(3)Mysql -uroot -p”初始密码”
(4)mysql> alter user root@”localhost” identified by “123456” -修改密码
(5)Mysql> grant reload (导入导出数据)lock tables(锁表) replication client(主从), process on(进程开启) . to sstuser@”localhost” identified by “123456”; -授权用户
(6)
72 73
Systemctl start mysql 启用数据库服务
Ss -antulp | grep :3306
Ss -antulp | grep :4567
4测试配置
测试集群功能
1查看集群信息
Mysql>Show status like “%wsrep%”
Wsrep_incomming_address =…
Wsrep_cluster_size 3
Wsrep_cluster_status primary
Wsrep_connected on
Wsrep_ready on
Primary
主要的;最重要的;基本的;最初的;最早的;初等教育的;小学教育的
2在任意一台服务器上添加访问授权用户sstuser 71授权
Grant all on db10.* to yaya@”%” identified by “123456”;
3查授权72\73
mysql -uroot -p123456 -e “show grants for yaya10@”%""
4访问在服务器 71
建库建表写数据,建表必须要有主键 -auto_increment
Cretae datebase db10;
Create table db10.a(id int primary key auto_increment ,name char(10));
Insert into db10.a(name) values(“tom”);
5client 连接到71 72 73 都可以看到有插入的数据
测试故障自动恢复
任何一台数据库服务宕机都不影响用户存取数据
服务运行后自动同步宕机期间数据
停止72 systemctl stop mysql
插入数据 71 insert into db10.a(name) values(“jim”);
客户端访问 Client :mysql -h192.168.4.71\73 -uyaya10 -p123456
重启72 systemctl start mysql
Ss -ntulp | grep :3306
SS -ntulp | grep :3306
Mysql -h192.168.4.71 \73
查看到72也是有数据的,自动同步数据的
Mysql -h192.168.4.72 -uyaya10 -p123456
Mysql 存储引擎
1存储引擎介绍 :作为可插拔式的组件提供
Mysql 服务自带功能程序,处理表的处理器
不同存储引擎不同功能和数据存储方式
Mysql 5.0-5.1 MyISAM
Innodb5.5-5.6 innodb
Client Mysql> Show engines; -查看数据库存储引擎
show create table db10.a; -查看表的存储引擎
简述 MySQL 体系结构的组成,并描述每个组成部分的作用。
主要包括 8 个部分:
管理工具:备份,恢复,安全,移植,集群等,这些工具一般和文件系统打交道,不需要和mysql-server 打交道,它们对应的都是命令。
连接池:进程数限制、内存检查、缓存检查等。
SQL 接口:用户通过 sql 客户端发过来的命令,由 sql 接口接收,sql 操作(DML 数据操作语言:查询、修改、升级数据等;DDL 数据定义语言:创建一个新的数据库、新的索引、删除一个用户等;存储过程、视图触发器。
分析器: 分析查询语句 事务处理 对象访问权限。
优化器: 优化访问路径 、 生成执行树。
缓存和缓冲:保存 sql 查询结果。
存储引擎:用于管理存储的文件系统,将逻辑结构转换为物理结构的程序;不同的存储引擎有不同的功能和存储方式。
(文件系统)。
文件日志
2修改表存储引擎
建表时手动指定
Show create table 表\G;
Mysql > create table db10.a(
Name char(40)
)Engine=innodb;
3修改服务存储引擎
Systemctl stop mysqld
Vim /etc/my.cnf
[mysqld]
Default-storage-engine=myisam
Systemctl restart mysqld
Mysql > mysql -uroot -p123456
Show engines;
4 修改表使用引擎
1 Create table db10.d(name char )
2 Show create table db10.d;
ENGINE=MEMORY DEFAULT CHARSET=latin1 |
3 System ls /var/lib/mysql/db10/d*
/var/lib/mysql/db10/d.frm
4 Alter table db10.d engine=myisam;
5 system ls /var/lib/mysql/db10/d.*
/var/lib/mysql/db10/d.frm /var/lib/mysql/db10/d.ibd
5 存储引擎特点
myisam
1 特点:不支持事物和事物回滚 外键
2 表文件
Frm 表结构
MYI 索引
MYD 数据
Innodb
1 特点:支持行级锁定
支持事物,事物回滚,外键
2 表文件
Frm
Ibd 数据索引 innodb index
3 事物日志文件
_Ibdata1 undo
_ib_logfile0 redo日志
_ib_logfile1
MySQL 锁机制
表级锁
行级锁 仅仅对被访问的行枷锁
锁类型
读锁(共享锁) 支持并发读
写锁 (独占锁)
事物特性
事物
事物回滚rollback
ACID
Innodb事物特性
A atomic 原子性
事物的整个操作是一个整体,不可分割,要么全部成功,要么全部失败
C consistency 一致性
事务操作前后,表中记录没变化
I isolation 隔离性
事物操作是相互隔离不受影响的
D durability 持久性
1 查看client 1自动提交功能
show variables like “autocommit”;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| autocommit | ON |
2关闭自动提交功能
set autocommit=off;
3创建表
create table db10.t1(name char(100)) engine=innodb;
4client2查看表
表没有特点,数据有
Client1 插入新纪录
insert into db10.t1(name) values(“yom”);
Client 1 :select * from db10.t1;
±-----+
| name |
±-----+
| yom |
Client2 看不到数据
(隔离性)
5client 1执行提交命令
Client 2 查看表记录
6关闭commit
测试rollback
set autocommit=off;
insert into db10.t1 values(“aha”),(“girl”);
select * from db10.t1; client2 看不到”girl”因为关闭了commit
rollback;client1 会回到最初表空白状态
开启Commit;
Client 2 可以看到数据了select * from db10.t1;
| aha |
| girl |
±-----+
show status like “table_lock%”;
±----------------------±------+
| Variable_name | Value |
±----------------------±------+
| Table_locks_immediate | 100 |