以下操作皆在Linux中进行
MySQL安装请看:CSDN
一、提升数据库高并发访问的效率的三种方式(考虑的顺序)
1、如何优化SQL和索引
2、采用缓存的策略,比如使用Redis将热点数据保存在内存数据库中,提升读取的效率
3、对数据库采用主从架构,进行读写分离。
二、主从复制的优点
- 读写分离
- 我们可以通过主从复制的方式来同步数据,然后通过读写分离来提高数据库并发处理能力。其中一个是Master主库,负责写入数据,我们称之为:写库。其它都是Slave从库,负责读取记录,我们称之为:读库。当主库进行更换新的时候,会自动将数据复制到从库中,而我们在客户端读取数据的时候,会从从库中进行读取。面对“读多写少”的需求,采用读写分离的方式,可以实现更高的并发访问。同时,我们还能对从服务器进行负载均衡,让不同的读请求按照策略均匀地分发到不同的从服务器上,让读取更加顺畅。读取更加顺畅的另一个原因,就是减少了锁表的影响,比如我们让主库负责写,当主库出现写锁的时候,不会影响到从库进行SELECT的读取。
- 数据备份
- 我们通过主从复制将主库上的数据复制到了从库上,相当于是一种热备份机制,也就是在主库正常运行的情况下进行的备份,不会影响到服务。
三、主从复制的原理
实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中,会基于3个线程 来操作,一个主库线程,两个从库线程。
- 二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在Binlog上加锁,读取完成之后,再将锁释放掉。
- 从库I/O线程会连接到主库,向主库发送请求更新Binlog。这时从库的I/O线程就可以读取到主库的二进制日志转储线程发送的Binlog更新部分,并且拷贝到本地的中继日志(Relay log)。
- 从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。
1、原理剖析
1.1、三个线程
实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中,会基于3个线程 来操作,一个主库线程,两个从库线程。
二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在Binlog上加锁,读取完成之后,再将锁释放掉。
从库I/O线程会连接到主库,向主库发送请求更新Binlog。这时从库的I/O线程就可以读取到主库的二进制日志转储线程发送的Binlog更新部分,并且拷贝到本地的中继日志(Relay log)。
从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。
不是所有版本的MySQL都默认开启服务器的二进制日志。在进行主从同步的时候,我们需要先检查服务器是否已经开启了二进制日志。
除非特殊指定,默认情况下从服务器会执行所有主服务器中保存的事件。也可以通过配置,使从服务器执行特定的事件。
1.2、复制三步骤
- Master将写操作记录到二进制日志(binlog)。这些记录叫做二进制日志事件(binary log events);
- Slave将Master的binary log events拷贝到它的中继日志(relay log);
- Slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的,而且重启后从接入点开始复制
1.3、复制的问题
复制的最大问题: 延时
1.4、复制的基本原则
- 每个Slave只有一个Master
- 每个Slave只能有一个唯一的服务器ID
- 每个Master可以有多个Slave
四、Linux下设置mysql主从复制配置
1、配置-主库Master
1.1、修改mysql的配置文件 vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志
server-id=99 #[必须]服务器唯一ID
1.2、重启mysql服务
systemctl restart mysqld
1.3、登录MySQL数据库,创建一个用户xxx,密码为xxxx,给此用户授予用于建立复制时需要用到的用户权限,也就是slave必须被master授权,具有该权限的用户,才能通过该用户复制
grant replication slave on *.* to 'user123'@'%' identified by 'user123@PWD123';
这里的用户为user123密码为user123@PWD123。
注:密码规范符合长度不小于8位,且必须含有数字,小写或大写字母,特殊字符。
1.4、登录数据库,执行 show master status; 查看Master状态,记录 File 与 Position 的值。之后不再执行任何操作,否则会改变上诉的值。
2、配置-从库Slave
2.1 修改mysql的配置文件 vi /etc/my.cnf
#从库只需配置服务唯一ID
[mysqld]
server-id=199 #[必须]服务器唯一ID
2.2 重启mysql服务
systemctl restart mysqld
2.3 登录mysql数据库,执行以下SQL,指定主库ip,主库授权后的用户及密码,主库日志文件与位置
change master to
master_host='192.168.138.128',master_user='user123',master_password='user123@PWD123',master_log_file='mysql-bin.0000001',master_log_pos=440;
重启slave线程
start slave;
2.4 登录mysql数据库,查看从数据库的状态
show slave status;