
目录
一、主从复制的概述
1、主从复制的作用
2、mysql的复制类型
3、mysql主从复制的过程
二、主从复制的部署
1、环境配置
2、主从服务器的时间同步
3、配置主服务器
4、配置从服务器
5、验证主从同步
三、读写分离的部署
1、安装Java环境
2、部署amoeba
3、客户端验证
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。您看,像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新
2、mysql的复制类型(1)基于语句的复制(STATEMENT)
在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。
(2)基于行的复制(ROW)
把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)混合类型的复制(MIXED)
默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制
1)Master 服务器保存记录到二进制日志(当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。)
在每个事务更新数据完成之前,Master 服务器在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master 服务器通知存储引擎提交事务。
2)Slave 服务器复制 Master 服务器的日志
Slave 服务器将 Master 服务器的二进制日志复制到其中继日志(Relay log)。
首先 Slave 服务器开始一个工作线程(I/O),I/O线程在 Master 服务器上打开一个普通的连接,然后开始 Binlog dump process。
Binlog dump process 从 Master 服务器的二进制日志中读取事件,如果 Slave 服务器已经跟上 Master 服务器,它会睡眠并等待 Master 服务器产生新的事件,I/O线程将这些事件写入中继日志。
3)Slave 服务器重放复制过来的日志
SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新 Slave 服务器的数据,使其与 Master 服务器中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
(1)master服务器
192.168.222.10 mysql 5.7
(2)slave1服务器
192.168.222.100 mysql 5.7
(3)slave2服务器
192.168.222.20 mysql 5.7
(4)Amoeba服务器
192.168.222.30 jdk1.6、Amoeba
(5)客户端
192.168.222.40 mysql 5.7
2、主从服务器时间同步(1)主服务器配置
1.安装时间同步服务器 yum install ntp -y 2.修改配置文件 vim /etc/ntp.conf server 127.127.222.0 #设置本地时钟源 fudge 127.127.222.0 stratum 8 #设置时间层级为8 限制在15 以内 3.开启服务 service ntpd start
(2)slave1服务器时间同步
1.安装时间同步服务器、同步服务 yum install ntp -y yum install ntpdate -y 2. 开启服务 service ntpd start 3. 执行同步 /usr/sbin/ntpdate 192.168.222.10 4.#计划定时任务 crontab -e */30 * * * * /usr/sbin/ntpdate 192.168.222.10
(3)slave2服务器时间同步
1.安装时间同步服务器、同步服务 yum install ntp -y yum install ntpdate -y 2. 开启服务 service ntpd start 3. 执行同步 /usr/sbin/ntpdate 192.168.222.10 4.#计划定时任务 crontab -e */30 * * * * /usr/sbin/ntpdate 192.168.222.10
3、配置主服务器
1. 开启二进制日志 vim /etc/my.cnf log-bin=master-bin #开启二进制日志 binlog_format=MIXED #二进制日志格式 log-slave-updates=true #开启从服务器同步 2. 重启服务 systemctl restart mysqld.service 3. 登入mysql,给从服务器在网段授权 mysql -uroot -p123123 grant replication slave on *.* to 'myslave'@'192.168.222.%' identified by '123123'; 刷新数据库 flush privileges; 查看主服务器二进制文件 show master status; 开启二进制日志
4、配置从服务器
(1)配置salve1服务器
1.#开启二进制日志 vim /etc/my.cnf server-id = 2 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index 2.#重启服务 systemctl restart mysqld.service 3. #登入mysql,配置同步注意master_log_file和master_log_pos的值要和master查询的一致 mysql -uroot -p123123 change master to master_host='192.168.222.10',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000010',master_log_pos=604; 4.#启动同步,如果报错,执行restart slave试试 start slave; show slave statusG; ##以下两个必须要是YES #Slave_IO_Running: Yes #Slave_SQL_Running: Yes
(2)配置salve2服务器
1.#开启二进制日志 vim /etc/my.cnf server-id = 3 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index 2.#重启服务 systemctl restart mysqld.service 3. #登入mysql,配置同步注意master_log_file和master_log_pos的值要和master查询的一致 mysql -uroot -p123123 change master to master_host='192.168.222.10',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000010',master_log_pos=604; 4.#启动同步,如果报错,执行restart slave试试 start slave; show slave statusG; ##以下两个必须要是YES #Slave_IO_Running: Yes #Slave_SQL_Running: Yes
5、验证主从同步
1、主服务器上创建新表 create database lk; 2、在两个从服务器上使用查看命令,是否能看到创建新的表 show databases;
主服务器
slave1服务器
slaves2服务器
三、读写分离的部署 1、安装java环境1、下载安装包 cd /opt jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz 2、把jdk复制到/usr/local下 cp jdk-6u14-linux-x64.bin /usr/local/ 3、赋予jdk权限并执行 chmod +x /usr/local/jdk-6u14-linux-x64.bin cd /usr/local/ ./jdk-6u14-linux-x64.bin #一路回车到底,最后输入yes 自动安装 4、jdk改个名字 mv jdk1.6.0_14/ jdk1.6 5、配置环境并刷新 vim /etc/profile export JAVA_HOME=/usr/local/jdk1.6 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin export AMOEBA_HOME=/usr/local/amoeba export PATH=$PATH:$AMOEBA_HOME/bin 6、刷新配置文件 source /etc/profile
2、安装amoeba
############## 安装amoeba ########### 1.在/usr/local目录下创建amoeba目录 mkdir /usr/local/amoeba 2.切换至opt解压amoeba cd /opt/ tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba cd /usr/local/ 切换至目录查看 3.给目录/usr/local/amoeba赋予执行权限 chmod -R 755 /usr/local/amoeba/ 4.运行amoeba /usr/local/amoeba/bin/amoeba ###########配置 Amoeba读写分离 #### 5.先在Master、Slave1mysql上开放权限给 Amoeba 访问 grant all on *.* to test@'192.168.222.%' identified by '123123'; flush privileges; 6.备份amoeba配置 cd /usr/local/amoeba/conf/ cp amoeba.xml amoeba.xml.bak cp dbserver.dtd dbserver.dtd.bak 7.修改amoeba配置 vim amoeba.xml 30amoeba #设置登录用户名 32123123 #设置密码 115master #设置默认池为master 118master #设置写池 119slaves #设置读池 vim dbServers.xml 23 #23行注释 26test #设置登录用户 28 #删除 29123123 #解决28注释,添加密码 45#服务池名 48 192.168.222.10 #添加地址 5255 192.168.222.100 复制6行 添加另一从节点 5962 192.168.222.20 65#定义池名 71 slave1,slave2 #写上从节点名 8.启动amoeba,并测试 amoeba start netstat -ntap |grep java
3、客户端验证
1.#安装mariadb yum install mariadb mariadb-server.x86_64 -y 2.#登入并查看数据库 mysql -uamoeba -p123123 -h 192.168.222.30 -P8066 3.#测试同步 ##在主服务器服务器上新建表 create database sk; use sk; create table ol(id int(10),name char(40)); show tables; ##在客户机上,插入数据会同步到所有数据库中 use sk; insert into ol values(1,'yinhe'); ##在主从服务器上查看 4.#测试读写分离 #停止slave1和slave2的slave同步功能 stop slave; #在master、slave1和slave2上插入数据