【运维技术】数据库主从同步搭建

数据库主从同步搭建

MYSQL主从同步是目前使用比较普遍的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步可以有效缓解数据库读写的压力。html

MySQL主从同步的机制

MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,经过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上经过一个I/O线程从Master MySQL上读取binlog,而后传输到Slave MySQL的中继日志中,而后Slave MySQL的SQL线程从中继日志中读取中继日志,而后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。mysql

MySQL主从同步的做用

一、能够做为一种备份机制,至关于热备份
二、能够用来作读写分离,均衡数据库负载sql

MySQL主从同步的步骤

# 主要步骤:
1. 安装主数据库
2. 修改root帐号密码,root帐号远程登陆
3. 安装从数据库
4. 修改root帐号密码,root帐号远程登陆,密码和主数据库密码相同 
5. 主数据库修改配置,添加server-id,添加bin-log文件
6. 主数据库建立同步帐号,指定内网ip能够访问,设定同步密码,使用从数据库链接主数据库测试连通性
7. 主数据库刷新表,锁住全部的表,查看master状态,记录bin-log文件和当前的定位编号
8. 使用mysqladmin备份数据库,没有数据能够忽略这一步,数据量大的状况下使用mysqldump来备份数据
9. 从数据库服务器配置server-id,将备份数据导入从服务器。开启binlog等配置
10. 从数据库修改配置,添加同步帐户信息以及bin-log文件和当前的定位编号
11. 开启同步,主数据库接触锁定。

实际操做

1. 安装主数据库

2. 修改root帐号密码,root帐号远程登陆

3. 安装从数据库

4. 修改root帐号密码,root帐号远程登陆,密码和主数据库密码相同

一、二、三、4:单机安装mysql教程数据库

cd /app
mkdir mysql
cd mysql
# 下载mysql的包,可使用服务器下载,也能够本地下载,上传到服务器上去
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
# 查看冲突版本软件
rpm -qa | grep redhat-lsb-core
rpm -qa | grep postfix
rpm -qa | grep mariadb
# 卸载冲突版本软件
rpm -ev redhat-lsb-core-4.1-27.el7.centos.1.x86_64
rpm -ev postfix-2.10.1-6.el7.x86_64
rpm -ev mariadb-libs-5.5.56-2.el7.x86_64
# 安装依赖
yum install -y net-tools
yum install -y libaio
# 安装rpm,必定要按照顺序安装,遇到问题必定要查询问题,不可直接继续安装
rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
# 启动mysql
systemctl start mysqld
# 查看初始用户密码
grep password /var/log/mysqld.log
# 使用mysql帐户登陆,修改初始化密码
mysql -p
# 输入查看的密码
set password = password("Yingtong@2018!");
# 容许root用户远程链接
grant all privileges on *.* to root@'%' identified by 'Yingtong@2018!'; 
flush privileges;
# 修改区分大小写的配置
vim /etc/my.cnf
# 底部加入配置
lower_case_table_names=1
# 从新启动mysql
systemctl restart mysqld
# 使用客户端工具链接服务器

5. 主数据库修改配置,添加server-id,添加bin-log文件

# 编辑,并使用:wq保存
vim /etc/my.cnf
# 中止mysql
systemctl stop mysql
# 启动mysql
systemctl start mysql
# 若是启动遇到问题可有能够查看mysql启动日志,以及systemctl 启动日志
# mysql日志
tailf /var/log/mysqld.log
# 系统日志
journalctl -xe

配置:/etc/my.cnf配置修改内容(主数据库)vim

# 添加serverid,注意必须与从数据库不相同
server-id=2
# 开启mysql-bin日志,使用默认数据目录:/var/lib/mysql/,使用其余目录会有问题
log-bin=/var/lib/mysql/mysql-bin
# 开始mysql-replay-bin日志,使用默认数据目录
relay_log = /var/lib/mysql/relay-bin
# 不区分大小写,项目中有些库使用大写区分,因此服务器上添加这个设定
lower_case_table_names=1

6. 主数据库建立同步帐号,指定内网ip能够访问,设定同步密码,使用从数据库链接主数据库测试连通性

主数据库:centos

# 登陆主数据库服务器,输入密码进行登陆
mysql -p
# 建立同步帐号,ip地址为从数据库ip地址,密码自行定义
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.48.131' IDENTIFIED BY 'Repl@2018!';
# 使用户生效
FLUSH PRIVILEGES;

从数据库:服务器

# 使用mysql登陆
mysql -urepl -h172.16.48.129 -pRepl@2018!
# 测试链接状况,成功链接上,说明建立的同步帐号没有问题

7. 主数据库刷新表,锁住全部的表,查看master状态,记录bin-log文件和当前的定位编号

主数据库;架构

# 链接主数据库
mysql -p
# 锁定数据库
flush tables with read lock;
# 查询主数据库信息,记录bin-log文件和坐标
show master status;
| File             | Position |
+------------------+----------+
| mysql-bin.000007 |      154

8. 使用mysqladmin备份数据库,没有数据能够忽略这一步,数据量大的状况下使用mysqldump来备份数据

主数据库;app

# 建立备份文件夹目录
mkdir -p /app/mysqlbackup/
# 备份出文件,数据量小的状况
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases > /app/mysqlbackup/mysql_bak.$(date +%F).sql
# 备份出文件,数据量大的状况
mysqldump -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock --all-databases | gzip > /app/mysqlbackup/mysql_bak.$(date +%F).sql.gz
# 从数据库可使用scp命令进行拷贝
scp -r root@172.16.48.129:/app/mysqlbackup/mysql_bak.2018-10-21.sql /app/mysqlbackup/

9. 将备份数据导入从服务器。从数据库配置修改和添加,server-id,开启binlog等配置

导入数据库配置ide

# 将备份数据导入从服务器
mysql -uroot -p'Yingtong@2018!' -S /var/lib/mysql/mysql.sock < /app/mysqlbackup/mysql_bak.2018-10-21.sql
# 修改从服务器数据库配置
vim /etc/my.cnf
# 从新启动数据库
systemctl stop mysqld
systemctl start mysqld

配置:/etc/my.cnf配置修改内容(从数据库)

# 服务id
server-id=1
# 开启mysql-binlog日志
log_bin = /var/lib/mysql/mysql-bin
# 开始mysql-relay日志
relay_log = /var/lib/mysql/relay-bin
# 设定日志的格式化
binlog-format = row
# 设定从库的日志更新
log-slave-updates = true
# 设定只读
read_only = 1
# 设定数据库不区分大小写
lower_case_table_names = 1

10. 从数据库修改配置,添加同步帐户信息以及bin-log文件和当前的定位编号

# 从数据库登陆mysql
mysql -p
# 设定同步帐号,输入前面步骤中的mysql的mysql-bin.000007,和坐标154
CHANGE MASTER TO
MASTER_HOST='172.16.48.129',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@2018!',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=154

# 开启同步
start slave;
# 查看同步状态:其中Slave_IO_Running: YES且Slave_SQL_Running: YES即为成功同步了
show slave status \G

11. 主数据库接触锁定。

# 主数据库
mysql -p
# 解除锁定
unlock tables;

12. 其余操做

# 中止数据库同步
stop salve;
# 中止同步线程
STOP SLAVE IO_THREAD

参考网站

Mysql主从同步(复制)

相关文章
相关标签/搜索