超详细搭建Mysql5.5主从复制

需求分析

在企业网站中,后端MySQL数据库只有一台时,会有以下问题
1.单点故障,服务不可用
2.无法处理大量的并发数据请求
3.数据丢失——大灾难

解决思路

增加MySQL数据库服务器,对数据进行备份,形成主备。确保主备MySQL数据库服务器数据是一样的。主服务器宕机了,备份服务器继续工作,数据有保障

工作原理

超详细搭建Mysql5.5主从复制

主服务器要开启(Binary log)二进制文件,当主服务器发生数据的更新,他就会记录到二进制日志文件里,主服务器着手处理储备的事。
此时对于从服务器而言开启两个线程
1.IO线程专门针对主服务器上的二进制日志,先去访问,如有新数据,给予从服务器,从服务器就往Relay log里面去写,写完之后IO不断向主服务器发问是否有新数据,继续写入Relay log中。当所有结束后Binary log和Relay log数据会相同
2.SQL线程首先读取Relay log,同时对比是否有新数据,读取之后开始重放。注意在恢复数据中,是二进制文件,里面记录了我们的sql语句,相当于数据恢复一样,重放的时候会把里面的数据放在从服务器中,同步到从服务器数据库中
最终实现主从就可以同步了

实验环境

主机名称 IP地址 操作系统 主要软件 网络连接模式
master 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave01 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave02 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT

备工作

1、编辑主机名

[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# hostnamectl set-hostname slave01
[root@localhost ~]# hostnamectl set-hostname slave02
[root@localhost ~]# bash

2、三台主机关闭防火墙及selinux

[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
[root@master ~]# vim /etc/sysconfig/selinux
超详细搭建Mysql5.5主从复制

3、重启服务

[root@master ~]# reboot

二、三台主机安装MySql

1、安装相关依赖、工具包

[root@master ~]# yum -y install ncurses-devel bison libaio-devel cmake

2、创建进程用户mysql

[root@master ~]# useradd -s /sbin/nologin mysql

3、解压、配置安装mysql

[root@master ~]# mkdir -p /usr/local/mysql #创建mysql目录

[root@master ~]# tar zxvf mysql-5.5.24.tar.gz -C /usr/src
[root@master ~]# cd /usr/src/mysql-5.5.24/

[root@master mysql-5.5.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306

解析:

DCMAKE_INSTALL_PREFIX:mysql软件安装位置
DDEFAULT_CHARSET:默认字符集
DDEFAULT_COLLATION:默认字符校验
DWITH_EXTRA_CHARSETS:额外的编码,请使用ALL来编译
DWITH_MYISAM_STORAGE_ENGINE:安装 myisam 存储引擎
DWITH_INNOBASE_STORAGE_ENGINE:安装 innodb 存储引擎
DWITH_MEMORY_STORAGE_ENGINE:安装 memory 存储引擎
DWITH_READLINE:支持readline库,支持一行行读取数据
DENABLED_LOCAL_INFILE:启用本地加载数据
DMYSQL_DATADIR:数据目录
DMYSQL_USER:指定mysql的运行用户
DMYSQL_TCP_PORT=3306:mysql的端口号默认是3306

[root@master mysql-5.5.24]# make && make install #编译及编译安装

4、修改mysql安装目录的所有者,所属组

[root@master mysql-5.5.24]# chown -R mysql:mysql /usr/local/mysql/

5、创建修改my.cnf配置文件

[root@master mysql-5.5.24]# cp support-files/my-medium.cnf /etc/my.cnf

6、添加系统服务

[root@master mysql-5.5.24]# vim /etc/profile #修改系统环境变量
#最后一行添加
export PATH=$PATH:/usr/local/mysql/bin/
[root@master mysql-5.5.24]# source /etc/profile #重新读取系统环境变量

[root@master mysql-5.5.24]# cp support-files/mysql.server /etc/init.d/mysqld #添加系统服务
[root@master mysql-5.5.24]# chmod +x /etc/init.d/mysqld #添加执行权限
[root@master mysql-5.5.24]# chkconfig --add mysqld #将mysqld添加为系统服务

7、初始化数据库

[root@master mysql-5.5.24]# /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

解析:

user:指定数据库管理员
basedir:指定mysql软件安装位置
datadir:指定mysql数据安装位置

[root@master mysql-5.5.24]# vim /etc/init.d/mysqld
#找到basedir、datadir进行赋值
basedir=/usr/local/mysql #约46行数据库安装目录
datadir=/home/mysql #约47行数据存放目录

8、重新启动数据库

[root@master mysql-5.5.24]# systemctl daemon-reload
[root@master mysql-5.5.24]# service mysqld start
[root@master mysql-5.5.24]# netstat -anpt | grep 3306 #查看端口
超详细搭建Mysql5.5主从复制

9、访问Mysql

[root@localhost ~]# mysqladmin -u root password '123'#设置新密码
[root@localhost ~]# mysql -uroot -p123 #登录mysql
超详细搭建Mysql5.5主从复制

三、搭建NTP服务,建立时间同步

1、三台主机安装NTP服务

[root@master ~]# yum -y install ntp

2、Master主机编辑NTP配置文件

[root@master ~]# vim /etc/ntp.conf

末行添加:

server 127.127.100.0 #指定本地服务器,注意这里设置的IP,我使用的是100网段
fudge 127.127.100.0 stratum 8 #指定层级,设为8级别 不需要跟别人同步,自己与自己同步

[root@master ~]# systemctl restart ntpd.service #重启服务

3、两台从节点设置时间同步

[root@slave01 ~]# yum -y install ntp ntpdate
[root@slave01 ~]# /usr/sbin/ntpdate 192.168.100.71
超详细搭建Mysql5.5主从复制

4、引入周期性计划任务

[root@master ~]# echo '/30 * /usr/sbin/ntpdate 192.168.100.71' >> /var/spool/cron/root
[root@master ~]# crontab -l
超详细搭建Mysql5.5主从复制

四、Master服务器配置

1、修改主配置文件

[root@master ~]# vim /etc/my.cnf
#在[mysqld]标签中编辑以下参数:
[mysqld]
log-bin=master-bin #约49行,将二进制日志修改为主服务器日志文件。
server-id = 11 #约57行,修改Mysql服务器id
log-slave-updates=true #添加此行,允许同步,允许客户机连接同步更新
这里提醒一下哈,对于其他的日志可以酌情对其开启,这里只是开启了主服务器日志文件

2、重启服务

[root@master ~]# systemctl restart mysqld.service

3、授权从服务器

[root@master ~]# mysql -u root -p
mysql> grant replication slave on . to 'adm'@'192.168.100.%' identified by '123';

授权所有从服务器复制权限,进行二进制的日志的权限管理

.:代表所有的库以及所有表br/>adm:授权用户,这里区别于root
@:分隔符
%:通配符所有的意思,这里指的是192.168.100.0/24网段
identified by:设置密码

mysql> flush privileges; #更新权限

mysql> show master status;#查看服务器的状态
超详细搭建Mysql5.5主从复制

五、Slave01服务器配置

1、修改主配置文件

[root@slave01 ~]# vim /etc/my.cnf

在[mysqld]标签中编辑以下参数:

[mysqld]
#log-bin=mysql-bin #将49行二进制日志文件注释掉,产生文件,造成浪费
server-id = 22 #约57行,设置服务器id,这里注意不要和主服务器IP地址重复
relay-log=relay-log-bin #添加此项,IO线程通过读取日志要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此项,索引日志位置

2、重启服务

[root@slave01 ~]# systemctl restart mysqld.service

master-bin.000001 | 332

3、配置主从同步

[root@slave01 ~]# mysql -u root -p
mysql> change master to master_host='192.168.100.71',master_user='adm',master_password='123',master_log_file='master-bin.000002',master_log_pos=332;

修改master指定主服务器主机名、用户名、密码、文件、位置:

master_host:#指定主服务器主机名
master_user:#主服务器予权限的用户
master_password:#主服务器予权限的密码
master_log_fie:#主服务器二进制文件名称
master_log_pos:#主服务器二进制文件位置

mysql> start slave; #启动从服务器

mysql> show slave status\G;#查看服务器的状态
超详细搭建Mysql5.5主从复制

六、Slave02服务器配置

1、修改主配置文件

[root@slave02 ~]# vim /etc/my.cnf

在[mysqld]标签中编辑以下参数:

[mysqld]
#log-bin=mysql-bin #将49行二进制日志文件注释掉,产生文件,造成浪费
server-id = 33 #约57行,设置服务器id,这里注意不要和主服务器、从服务器01IP地址重复
relay-log=relay-log-bin #添加此项,IO线程通过读取日志要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此项,索引日志位置

2、重启服务

[root@slave02 ~]# systemctl restart mysqld.service

3、配置主从同步

[root@slave02 ~]# mysql -u root -p
mysql> change master to master_host='192.168.100.71',master_user='adm',master_password='123',master_log_file='master-bin.000002',master_log_pos=332;

mysql> start slave;
mysql> show slave status\G;
超详细搭建Mysql5.5主从复制

七、主从复制效果测试

1、主服务器添加数据

[root@master ~]# mysql -u root -p
mysql> create database db_test;
mysql> show databases;
超详细搭建Mysql5.5主从复制

2、查看slave01服务器

[root@slave01 ~]# mysql -u root -p123 -e "show databases;"
超详细搭建Mysql5.5主从复制

3、查看slave02服务器

[root@slave02 ~]# mysql -u root -p123 -e "show databases;"
超详细搭建Mysql5.5主从复制

猜你喜欢

转载自blog.51cto.com/11905606/2170903
今日推荐