企业级高性能MYSQL的用法宝典
1.数据库的基本介绍
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的二维表中,并将这些表放入数据库,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
-
Mysql是开源的,所以你不需要支付额外的费用。
-
Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
-
MySQL使用标准的SQL数据语言形式。
-
Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
-
Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
-
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
-
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
2.基于binlog的主从复制(异步复制)
1.主从复制原理
mysql的主从配置又叫replication,AB复制,基于binlog二进制日志,主数据库必须开启binlog二进制日志才能进行复制。
过程:
主数据库将更改操作记录到binlog二进制日志(主数据库有log dump线程和从数据库的i/o线程传递binlog)。
从库生成两个线程,一个i/o线程,一个SQL线程
i/o线程去请求主库的binlog,并且得到的binlog日志写到relay log(中继日志)文件中
然后主库会生成一个log dump线程,用来给从库的i/o线程传binlog;SQL线程,会读取中继日志文件,并解析成具体的操作执行,这样主从的操作就一致了,而最终的数据也就一致了。
作为异步复制,其主库将事件写入binlog二进制文件,dump线程将binlog文件发送出去,不保证其他从节点是否会收到binlog二进制文件。
2.实现主从复制的要求
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不同
- 从库服务器能连同主库
主从复制的实现
1. 配置主库端:
第一步:在主库中安装mysql,这里我们用server1作为主库
yum install mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
第二步:编辑配置文件
vim /etc/my.cnf
最后面添加:
log-bin=mysql-bin #开启二进制日志
server-id=1 #服务器ID
systemctl start mysqld #开启数据库
第三步:查看初始化密码
开启数据库之后会在 /var/log/mysqld.log 里面生成一个初始密码
cat /var/log/mysqld.log | grep password
我的初始密码为:7k:OQ*Yfj.tE
第四步:安全初始化
mysql_secure_installation
安全初始化完成之后这时候我们就可以登录数据库了!!!!!
第五步:创建用户并授权
参数解释:
replication 表示授权复制的权限
*.* 表示所有数据库可以进行同步
repl 表示授权名,可以随意填写
'192.168.43.%' 表示授权192.168.43.0/24的网段所有服务器可以同步, %表示任意
2. 配置从库端 这里我们用server2作为从库
配置从库并开启从库
注意:master_log_file 和master_log_pos 的值都要依照主设备状态中的值来设定
测试:
配置主从复制完成后,那我们来检测一下能不能实现复制
在主库端创建库:
然后我们在从库中就可以看到westos库:
在主库中创建表,并插入数据:
在从库中可以看到数据:
3.基于GDIT的主从复制
1.基于GDIT的复制方式
mysql数据库从5.6.5开始新增一种基于GDIT的复制方式。GTID (Global Transaction ID) 是对于一个已提交事务的编号,并且是一个全局唯一的编号。 GTID 实际上 是由 UUID+TID 组成的。其中 UUID 是一个 MySQL 实例的唯一标识。
-
主从复制,默认是通过pos复制(postion),就是说在日志文档里,将用户进行的每一项操作都进行编号(pos),每一个event都有一个起始编号、一个终止编号。我们在配置主从复制时从节点时要输入master的log_pos值就是这个原因,要求它从哪个pos开始同步数据库里的数据,这也是传统复制技术。
-
MySQL5.6增加了GTID复制,GTID就是类似于pos的一个作用,不过它是整个mysql复制架构全局通用的,就是说在这整个mysql冗余架构中,它们的日志文件里事件的GTID值是一致的。
-
GTID (Global Transaction ID) 是对于一个已提交事务的编号,并且是一个全局唯一的编号。 GTID 实际上是由 UUID+TID 组成的。其中 UUID 是一个 MySQL 实例的唯一标识。TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
-
通过GDIT保证每个主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
pos与GTID的区别:
两者都是日志文件里事件的一个标志,如果将整个mysql集群看作一个整体:pos就是局部的,GTID就是全局的。
2.实现主从复制
第一步:在主从两端(server1 server2)都修改配置文件:
在server1和server2中做以下操作:
vim /etc/my.cnf
gtid_mode=ON 开启gtid模式
enforce-gtid-consistency=true 强制gtid一致性,用于保证启动gitd后事务的安全
systemctl restart mysqld #重启mysql
第二步:在从库端先停掉slave,然后重新创建连接:
所以呢?去掉分号来一次看看
测试
在主库表中添加新的信息:
从库查看是否复制成功?来来来 看一下!!!!