MySQL Replication:NySQL复制,MySQL的复制默认为异步工做模式
mysql的复制功能是mysql内置的,装上它以后就具有了这个功能,而mysql复制是mysql实现大规模高性能应用的一个基本工具,是 mysql完成水平扩展的基本架构,为了可以应付更多的访问请求,一般状况下咱们须要对服务器进行扩展,而扩展一般有两种方式:向上扩展和向外扩展;
向上扩展:scale on,也称为垂直扩展,通常是扩充服务器的内存或CPU颗数的这种就是向上扩展。
向外扩展:scale out,也称为水平扩展,比较一台服务器不够,再加一台服务器,再不够再加,这种状况就是向外扩展。
其实MySQL的的复制功能就是使用MySQL向外扩展的能力,也就是水平扩展的功能。
所谓同步的复制:首 先主服务器每更新一条数据先写到磁盘文件中,同时还要写一个到二进制日志文件中,从服务器就会到主服务器请求二进制信息保存在中继日志中,保存好后由本地 的SQL thread从中继日志应用到从服务器的本地有磁盘文件中,当这个过程完成以后再由从服务器返回确认结果给主服务器,主服务器才返回结果给客户端的。
所谓异步复制:当主服务器要写数据时,先写到本地的磁盘,同时写到二进制文件日志中,写好二进制日志文件后就把结果返回给客户端,至于从服务有没有来主服务器同步二进制日志他不关心。
注意:在作复制时双方的的MySQL要一致,若是不一致,主的要低于从的。
MySQL主从服务的工做原理图:mysql
这里还要注意,若是从服务器不断的到主服务器来请求数据,发现这些数据已是最新的数据了,那从服务器的I/O thread将会转为睡眠状态,由于主服务器会通知,而I/O线程不会作轮循,从服务器的二进制日志文件一般是被关闭状态的,从服务器是不容许执行写操做 的。
下面来完成主从复制的基本操做步骤:
一、这里咱们要有两台主机、我这里使用克隆主服务器的主机当作从服务器、首先要把虚拟主机关机才能够克隆的:sql
克隆完以后咱们就开机登陆、确保主从服务器都正常运行了便可:vim
二、作主从复制最重要的一点就是双方的server-id不能相同;然而在主服务器上只须要三步:
1)就是改server-id
2)启用二进制日志
3)建立有复制权限的账号
# vim /etc/my.cnfbash
改好以后保存退出便可,再重启服务器,建立二进制目录:服务器
# mkdir /data/binlogs # chown -R mysql.mysql /data/binlogs 重启主服务器的mysql服务; # service mysqld restart
然后链接到主服务器上受权一个有复制权限的账号:架构
# mysql -uroot -hlocalhost -p MariaDB [hellodb]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.16.251.156' IDENTIFIED BY 'replpass'; MariaDB [hellodb]> FLUSH PRIVILEGES;
三、在从服务器上有如下几步:
1)改server-id
2)启用中继日志
3)链接主服务器
4)启动复制线程
配置从服务器的相关配置信息:
# vim /etc/my.cnf异步
# mkdir /data/relaylogs/ # chown -R mysql.mysql /data/relaylogs 重启mysql服务: # service mysqld restart 再连到从服务器的mysql服务器上: # mysql -uroot -hlocalhost -p 查看一下从服务器的中继日志是否在启动状态: MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%relay%';
按照上面的步骤再链接主服务器: 工具
# MASTER_HOST='172.16.251.244' --主服务器的IP地址 # MASTER_USER='repluser' --主服务器上受权复制的用户名 # MASTER_PASSWORD='replpass' --主服务器上受权用名的密码 # MASTER_LOG_FILE='mysql-bin.000006' --主服务器上的日志文件 # MASTER_LOG_POS=245 --主服务器上日志文件的位置 MariaDB [hellodb]> CHANGE MASTER TO MASTER_HOST='172.16.251.244',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000006',MASTER_LOG_POS=245; #指定日志从哪一个位置开始复制
可是此时的从服务器尚未工做起来,要使从服务器工做起来还要手动启动复制线程,咱们上面的步骤写得很明白:
MariaDB [(none)]> START SLAVE;
性能