<b>MySQL</b><b>的复制</b>(Replication):
<b>复制</b>:BinaryLog(二进制日志)把它复制到另外一台服务器上去。在执行一次!则另外一台服务器就会跟此台服务器的一样;这样主要是做备份;
<b>当服务器性能瓶颈时、解决的方案</b>:
<b>提高性能的方法</b>:
向上扩展(SCALE ON):很少用,通过提供一个性能更好的服务器,来扩展服务器处理能力的方式。 有一缺陷:性能扩展n倍,意味着价格通常扩展m*n倍,代价非常高。
向外扩展(SCALE OUT):通过提供多台服务器的方式,将访问压力平均分摊到不同的服务器中去。
<b>Cluster</b><b>(集群)</b>:
Load Balancing(负载均衡集群LB):将一个应用的请求分摊到多个服务器上,进而提供更好的性能表现的集群
High Availability(高可用集群HA):本身不能起到负载均衡的能力。主要目的:为了防止某一台服务器出现故障时,导致整个服务不可用,而为其提供备用机,或冗余机制。
High Performance(高性能集群HP):提供超级计算能力,完成复杂运算。将一非常大的运算需求切割成n片,每一台计算机计算一片,完成之后,返回给切片的计算机整合起来,得最终结果。
最常见的是前两种集群
<b>MySQL Replication</b><b>:</b>
就是一种能够通过向外扩展,将mysql的请求平均分担到多台mysql服务器的负载均衡集群,同时结合第三方的控制组件或软件,能够让mysql复制集群制作成既有负载均衡能力,又有高可用特征的集群。
<b>MySQL</b><b>的复制</b>是能够将数据从一个MySQL服务器(master)传输或复制到另一台或多台MySQL服务器(slave)上的机制。
<b>中继日志</b>:主服务器将数据传输到从服务器后,数据存储到中继日志中,而并非存储到磁盘上,从服务器会启动一个mysql进程读取中继日志,在mysql数据库上执行,最终实现了主从服务器上数据的一致。
从服务器是否复制二进制日志,取决与架构设计。
<b>MySQL</b><b>的主从复制是异步复制。</b>
<b>主服务器从服务器复制有:</b>
<b>异步(async</b><b>)</b>:只要发送过去就算完成,不管接收方是否接收到 写操作在内存中完成的。
<b>同步(sync</b><b>)</b>:发送方要接收到接收方的确认信号以后才终止传输
<b>从服务器延时</b>(Delayed):
只要是异步,就不可避免
从服务器的写操作从来都是单线程的,而主服务器却可以一次写入多个。
<b>主从复制启动3</b><b>个线程</b>:
主:dump thread:负责提供数据,将二进制日志文件的内容读取出来,发送给从服务器的专用线程的线程
从:I/O thread:负责接收主服务器发送过来的数据,并将数据写入到中继日志中
SQL thread:负责应用数据,一次从中继日志中读取一个命令,并执行
<b>区别主从服务器各自的名称或标识:</b>
为了避免日志的循环复制,要有身份标识Server ID(主从ID不能相同)
每个服务器在同一个架构里要有自己唯一的身份标识
<b>建立复制账号:</b>
赋予复制权限
<b>基于SSL</b><b>复制</b>:
当跨越互联网进行复制时,数据传送都是明文的,所以建议用<b>SSL</b><b>加密</b>,需要建立CA,为主、从服务器发证
首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.20-linux2.6-i686.tar.gz
安装mysql 、这里就不给步骤了、如果不会请参考mysql的原理、安装、基本应用那个文档;
> select version(); 显示mysql的版本号;
MySQL从服务器的软件版本一定不能比主服务器的软件版本低,版本要高或一样。主主复制版本一定要一样。
<b>建立</b><b>MySQL</b><b>主服务器和从服务器:</b>
以下是两个刚创建的主从服务器例子:
主服务器的ip:172.16.39.1
从服务器的ip:172.16.39.2
<b>建立</b><b>MySQL</b><b>主服务器</b>:
主服务器
# vim /etc/my.cnf
server id = 1 (若主为1,从一定不能为1,记得要调整)
innodb_file_per_table = 1
主服务器上要启动二进制日志,默认启动:
log-bin=mysql-bin(而从服务器的二进制日志是否启动,要看它是否要作为其他服务器的主服务器,若不,就不需要启动了,可以注释)
在主服务上创建用户具有复制的权限:
mysql> <b>grant replication client, replication slave on *.* to repl@'172.16.%.%' identified by 'redhat';</b> 在主服务器上创建用户
mysql> <b>flush privileges;</b> 让其生效
查看所设置权限:
mysql> <b>show grants for repl@'172.16.%.%'; 确保没有问题、查看一下</b>
<b>创建</b><b>MySQL</b><b>从服务器</b>:
server id = 11(值可任意填写,但不可与主服务器相同)
还可以再加一项,使每个文件一个表:
mysql> show global variables like 'relay%'; 查到的结果如下:
+-----------------------+----------------+
| Variable_name | Value |
| relay_log | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
# vim /etc/my.cnf 按下面步骤启用
注释掉:
# log-bin=mysql-bin
启用:
relay-log=relay-bin (“_”与“-”的意义是相同的)
relay-lob-index=relay-bin.index
要想生效,服务器重启:
# service mysqld restart;
查看从服务器运行状态:
mysql> show slave status;
<b>启动从服务器的线程命令:</b>
查看帮助信息:
mysql> help change master to
<b>启动从服务器的线程</b>:
mysql> change master to
-> master_host='172.16.39.1',
-> master_user='repl',
-> master_password='redhat';
一旦执行 change master 命令,只要不换参数、不需要再执行;
要使用此命令明确启动slave:
mysql> start slave;
mysql> show slave status\G <b>查看从服务器的工作属性</b>
查看这两条信息是否启动:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这个一定要是 YES
在从服务器上、 如果想看进程工作正常使用命令:
mysql><b>show processlist;</b>
服务正常、这个主从服务器就完成了;上面是两个刚创建的主从服务器;
下面是主服务器应用了一段时间后、再创建从服务器:
先备份主服务器上的所有数据:
命令:
#mysqldump --all-databases --lock-all-tables –master-data=2 > /tmp/slave.sql
在复制到从服务器上去:
#scp /tmp/slave.sql 172.16.39.2:/tmp
然后在从服务器上导入数据;
导入前要关闭二进制日志 mysql><b>SET SQL_LOG_BIN=0;</b>
然后在导入数据: mysql><b>SOURCE /tmp/slave.sql; </b>
导入后在执行:<b>mysql> change master to </b>
<b>-> master_host='172.16.39.1',</b>
<b>-> master_user='repl', </b>
<b>-> master_password='redhat'</b><b>,</b>
<b>->master_log_file=’mysql-bin.000001’,</b>
<b>->master_log_pos=623;</b>
<b>623</b><b>是导入备份后的位置、一定要从这个位置开始;</b>
<b>#cd /tmp</b>
<b>#head -30 slave.sql</b>
<b>可以查看导入备份后的位置。</b>
<b> </b>
然后在<b>:</b>mysql><b>start slave; <b>启动从服务器</b></b>
查看进程是否启动:mysql><b>show slave status\G</b>