MySQL主从复制搭建.docx
- 文档编号:11329034
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:63
- 大小:536.56KB
MySQL主从复制搭建.docx
《MySQL主从复制搭建.docx》由会员分享,可在线阅读,更多相关《MySQL主从复制搭建.docx(63页珍藏版)》请在冰豆网上搜索。
MySQL主从复制搭建
一、环境说明
1.软件准备
1)OracleLinuxServerrelease6.4
2)MySQL5.6.38社区版
3)mha4mysql-manager-0.57和mha4mysql-node-0.57
2.网络设置
不需要额外的IP资源,只需要一个网卡即可
注意关闭防火墙,并设置selinux=disabled
测试环境配置信息如下
服务器名称
Master
Slave1
Slave2
IP
10.0.8.91
10.0.8.92
10.0.8.93
netmask
255.255.255.0
255.255.255.0
255.255.255.0
VIP
10.0.8.94
Manager节点
10.0.8.92
3.实现原理
主从复制的原理:
分为同步复制和异步复制,实际复制架构中大部分为异步复制。
复制的基本过程如下:
1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave的IO进程。
返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
3).Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4).Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
二、安装MySQL软件
1.准备
在虚拟机安装两台同样配置的操作系统,设置主机名,IP,selinux,禁掉防火墙
MySQL有三种安装方式,分别为源码安装,二进制文件安装,rpm包安装。
其中源码安装定制自由度最高,rpm方式最差;源码安装最复杂,rpm最容易。
本文档使用二进制方式安装。
软件下载地址:
配置/etc/hosts
10.0.8.91master
10.0.8.92slave1
10.0.8.93slave2
2.添加组和用户
groupaddmysql
useradd-gmysqlmysql
3.解压安装软件
#解压
tar-zxfmysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
#复制解压后的mysql目录
cp-rmysql-5.6.38-linux-glibc2.12-x86_64/usr/local/mysql
#创建目录
mkdir-p/u01/data/mysql/logs
chown-Rmysql:
mysql/u01/data/mysql
cd/usr/local/mysql/
chown-Rmysql:
mysql./
cpsupport-files/mysql.server/etc/init.d/mysqld
chmod755/etc/init.d/mysqld
#初始化f文件
mv/etc/f/etc/f.backup
vi/etc/f
/*文件内容详见附录*/
安装依赖包
yum-yinstallautoconf
yum install -y libaio
#执行安装
./scripts/mysql_install_db--user=mysql--datadir=/u01/data/mysql/data--defaults-file=/etc/f
4.修改启动脚本
#修改启动脚本
vi/etc/init.d/mysqld
#修改项:
basedir=/usr/local/mysql/
datadir=/u01/data/mysql/data
5.启动服务
#启动服务
servicemysqldstart
#测试连接
./bin/mysql-uroot
#加入环境变量,编辑/etc/profile
exportPATH=$PATH:
/usr/local/mysql/bin
source/etc/profile
#启动/关闭/查看状态mysql
servicemysqldstart|stop|status
6.初始化配置
#mysql-uroot-p
1)修改root用户密码
#mysqladmin-urootpassword要设置的密码(加不加引号都可以)
或者
#mysqladmin-u用户名-p旧密码password新密码(加不加引号都可以)
或者
mysql>UPDATEuserSETPassword=PASSWORD('your_new_password')whereUSER='root';
2)删除匿名用户
mysql>SELECTUser,Host,PasswordFROMmysql.user;
mysql>usemysql
mysql>deletefromuserwhereuser='';
mysql> flushprivileges;
注:
关于匿名用户和MySQL用户认证详见附录
3)创建数据库,测试表
mysql>createdatabasekk;
创建表
usekk;
createtableteacher
(
idint(3)auto_incrementnotnullprimarykey,
namechar(10)notnull,
addressvarchar(50)default'深圳',
yeardate
);
insertintoteachervalues(1,'xiaoming','一中','1976-10-10');
insertintoteachervalues(2,'xiaohu','二中','1975-12-23');
insertintoteachervalues(3,'mangguo','北京','2015-4-2');
三、配置主从复制
1.修改主从节点f配置
1)master服务器配置:
vi/etc/f
[mysqld]
server-id=101#设置服务器唯一的id,默认是1,slave设置102
log-bin=kk-bin#启用二进制日志,这是日志名称的开头部分
#binlog-ignore-db=mysql,information_schema#忽略写入binlog的库
2)slave服务器配置:
vi/usr/local/mysql/etc/f
[mysqld]
server-id=102
replicate-do-db=kk#只同步kk库
slave-skip-errors=all#忽略因复制出现的所有错误
2.重启主从服务器mysql服务
/etc/init.d/mysqldrestart
3.备份master,并还原到slave
#master节点
/usr/local/mysql/bin/mysqldump-uroot-prootkk>/tmp/kk.sql
#slave节点
mysql-uroot-proot-e"createdatabasekk"
mysql-uroot-prootkk
4.在主节点建立帐户并授权slave
mysql>CREATEUSER'repl'@'%'IDENTIFIEDBY'repl';
#mysql>GRANTALLON*.*TO'repl'@'%';为了做实验方便,后续需要研究权限问题,这里并不需要这么大权限
mysql>grantreplicationslaveon*.*to'repl'@10.0.8.92identifiedby'repl';
grantreplicationslaveon*.*to'repl'@10.0.8.93identifiedby'repl';
为了保证同步前数据一致,先把master表锁一下
mysql>flushtableswithreadlock;
5.查看master状态
mysql>showmasterstatus;
6.配置slave
mysql>changemasterto
master_host='10.0.8.91',
master_user='repl',
master_password='repl',
master_log_file='kk-bin.000001',
master_log_pos=809;
注:
master_log_file和master_log_pos分别对应上一步查到的file和Position
7.启动slave同步进程并查看状态
mysql>startslave;
mysql>showslavestatus\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了
8.两台slave服务器设置read_only(从库对外提供读服务,只所以没有写进配置文件,是因为随时slave会提升为master)
mysql>setglobalread_only=1
9.创建监控用户(在master上执行)
mysql>grantallprivilegeson*.*toroot@'%'identifiedby'root';
mysql>flushprivileges;
10.回到master,进到mysql解除table(表)的锁定
mysql>unlocktables;
四、主从测试
主节点
Mysql>usekk;
createtabletest
(idint(15),namevarchar(300),address1varchar(300),address2varchar(300),address3varchar(300),address4varchar(300),address5varchar(300),address6varchar(300),address7varchar(300),address8varchar(300),address9varchar(300),address10varchar(300),yeardate
);
创建存储过程
DROPPROCEDUREIFEXISTStest;
delimiter#
createproceduretest()
begin
declareiintdefault0;
whilei<20000do
insertintotest(id,name,address1,address2,address3,address4,address5,address6,address7,address8,address9,address10,year)values(i,'小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明小明','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳深圳','1999-05-21');
seti=i+1;
endwhile;
end#
调用存储过程
delimiter;
calltest();
从节点查看结果
selectcount(*)fromtest;
五、主从切换
1.模拟master宕机
mysql>shutdown;
mysql>systemservicemysql.serverstatus;
2.操作从节点
确保从库都执行了relaylog的全部更新,在从库上执行stopslaveio_thread,然后检查showprocesslist的输出,状态是Slavehasreadallrelaylog;waitingformoreupdates,表示更新都执行完毕
mysql>stopslaveio_thread;
mysql>showprocesslist;
3.设置slave为master
在从库Slave上,执行stopslave来停止从服务,然后执行resetmaster重置成主库;
mysql>showmasterstatus;
mysql>stopslave;
mysql>resetmaster;
4.检查slave的log-bin是否打开,如果没打开,则需要打开
5.删除从库Slave上的master.info和relay-log.info,否则下次重启则按照从库启动;
位置:
/u01/data/mysql/data/
6.如果有其他slave,需要把指向修改到新的master
在Slave2上,执行stopslave停止从库服务,然后执行changemasterto重新指向主库slave1,再执行startslave启动从库;
mysql>stopslave;
mysql>changemastertomaster_host='10.0.8.92';
mysql>startslave;
mysql>showslavestatus\G;
7.修改应用程序指向
六、MHA配置
●安装MHAnode包
1、在所有节点安装MHAnode所需的perl模块(DBD:
mysql)
yum installperl-DBD-MySQL-y (可能需要epel源)
安装其他组建
yuminstallcpan-y
yuminstallperl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker-y
cpanExtUtils:
:
Install
2、在所有的节点安装mhanode(包括Manager节点):
tarxfmha4mysql-node-0.57.tar.gz
cdmha4mysql-node-0.57
perlMakefile.PL
make&&makeinstall
安装完成后会在/usr/local/bin目录下生成以下脚本文件
Node工具包(这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs保存和复制master的二进制日志
apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs清除中继日志(不会阻塞SQL线程)
3、增加系统环境变量:
echo''>>/etc/profile
echo'exportPATH=$PATH:
/usr/local/bin'>>/etc/profile
source/etc/profile
●安装MHAmanager包
为防止master宕机后,IP无法切换,要避免选择master节点作为manager节点,本次实验我们选择备用master主机(slave1)作为manager节点
MHAManager中主要包括了几个管理员的命令行工具,例如master_manger,master_master_switch等。
首先安装MHAManger依赖的perl模块
yuminstallperl-DBD-MySQLperl-Config-Tinyperl-Log-Dispatchperl-Parallel-ForkManagerperl-Time-HiRes-y
rpm-ivhperl-Config-Tiny-2.14-7.el7.noarch.rpm
yuminstallperl-Class-Loadperl-Params-Validateperl-Sys-Syslog
rpm-ivhperl-Mail-Sendmail-0.79-21.el7.noarch.rpm
rpm-ivhperl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
rpm-ivhperl-MIME-Types-1.38-2.el7.noarch.rpm
rpm-ivhperl-MIME-Lite-3.030-1.el7.noarch.rpm
如果有没有装上的,在下面网址下载模块并安装
https:
//metacpan.org/
安装方法:
1,解压模块安装包
2,perlMakefile.PL
3,make&&makeinstall
安装方法可参考
安装MHAManager软件包:
tarxfmha4mysql-manager-0.57.tar.gz
cdmha4mysql-manager-0.57
perlMakefile.PL
make&&makeinstall
安装完成后会在/usr/local/bin目录下面生成以下脚本文件:
Manager工具包主要包括以下几个工具:
masterha_check_ssh检查MHA的SSH配置状况
masterha_check_repl检查MySQL复制状况
masterha_manger启动MHA
masterha_check_status检测当前MHA运行状态
masterha_master_monitor检测master是否宕机
masterha_master_switch控制故障转移(自动或者手动)
masterha_conf_host添加或删除配置的server信息
另外在安装包还有几个样例脚本(使用前需要自己修改),可用于功能扩展
master_ip_failover#自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移
master_ip_online_change#在线切换时vip的管理
power_manager#故障发生后关闭主机的脚本
send_report#因故障切换后发送报警的脚本
●配置互信
这里给出两节点互信配置示例,三节点类似
1)在各个主机生成密钥
/usr/bin/ssh-keygen-trsa
2)把节点2的两个文件,改名并传到节点1
cd/home/oracle/.ssh
scpid_rsa.pub192.168.56.10:
/home/oracle/.ssh/id_rsa.pub1
3)把节点1的四个文件合成一个文件
catid_rsa.pubid_rsa.pub1>authorized_keys
4)修改文件权限
chmod644authorized_keys
5)然后把生成的文件传到节点2
scpauthorized_keys192.168.56.20:
/home/oracle/.ssh
6)之后要测试一下(如果都不需要密码,得到时间后。
就说明ssh对等性配置成功。
)
请注意,当使用ssh第一次访问远程主机时,其RSA密钥将是未知的,从而将提示你确认是否希望连接该主机。
SSH将记录该远程主机的RSA密钥,并在以后连接该主机时不再做出相关提示。
分别以oracle身份登录到第一和第二台主机
sshrac1date
sshrac2date
sshrac1privdate
sshrac2privdate
●配置MHA环境
1、创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。
[root@slave1~]#mkdir-p/etc/masterha
[root@slave1~]#cpmha4mysql-manager
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 主从 复制 搭建