基于CentOS7的MySQL数据库主从备份
Posted 染血的茉莉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于CentOS7的MySQL数据库主从备份相关的知识,希望对你有一定的参考价值。
Mysql主从备份介绍
主从备份就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。
使用主从备份的原因
Django网站访问量比较大,对数据库的读写操作十分频繁,分析access_log,发现有的数据表查询居多,有的表写入居多,比如session,这样单个数据库执行两种业务操作负担较大,所以使用主从备份的逻辑。
主从备份的步骤
配置详情演示
1.开始前,应该保证两台服务器能够互相通信
master:192.168.29.201
minion:192.168.29.129
2.关闭两台服务器的防火墙和selinux
systemctl stop firewalld #关闭防火墙 setenforce 0 #关闭selinux
3.给两台服务器安装mariadb数据库,并进入 生产模式
yum install mariadb mariadb-server -y #yum安装
systemctl start mariadb #开启服务
systemctl enable mariadb #设置开机启动mariadb
mysql_secure_installation #初始化
注意:在执行初始化数据库命令操作的时候,该选项要为n Disallow root login remotely? [Y/n] n
4. master创建需要主从备份的数据库
MariaDB [(none)]> create database masterdb charset=utf8;
5. master授权所有用户可以操作表
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'123\' WITH GRANT OPTION; #授权root用户使用123密码从任意地址段的ip进行登录数据库,并有对所有库中的表操作的权限,且允许该用户给其他用户授权
6.刷新授权表
MariaDB [(none)]> flush privileges;
7.在master中创建一张测试表
MariaDB [masterdb]> create table master_table(id int primary key auto_increment,username char(32));
Query OK, 0 rows affected (0.01 sec)
8.导出数据库
[root@bogon opt]# mysqldump -h localhost -u root -p123456 masterdb > masterdb.sql
9.将数据库导出文件传递给minion
[root@bogon opt]# scp ./masterdb.sql root@192.168.29.129:/opt
10.minion创建同名数据库
MariaDB [(none)]> create database masterdb charset=utf8; Query OK, 1 row affected (0.00 sec)
11.minion导入数据表
[root@bogon opt]# mysql -h localhost -u root -p123456 masterdb < masterdb.sql
12.master启动主从备份的配置
[root@bogon opt]# vim /etc/my.cnf
在[mysqld]中配置以下内容:
server-id=1 log_bin=mysql-bin? binlog-do-db=masterdb #配置数据库的名字 binlog-ignore-db=mysql
13.重启master的mariadb并查看其状态
[root@bogon opt]# systemctl restart mariadb #重启数据库
MariaDB [(none)]> show master status; #先进入数据库,在查看master备份状态
14.配置minion主从备份
[root@bogon opt]# vim /etc/my.cnf
在[mysqld]中配置以下内容:
server-id=2 log_bin=mysql-bin? binlog-do-db=masterdb # 配置数据库的名字 binlog-ignore-db=mysql
15.重启服务器
[root@bogon ~]# systemctl restart mariadb
16.客户端上指定要进行主从备份的主服务器
MariaDB [masterdb]> change master to MASTER_HOST=\'192.168.29.201\',MASTER_USER=\'root\',MASTER_PASSWORD=\'123\',MASTER_LOG_FILE=\'mysql-bin?.000002\',MASTER_LOG_POS=245; Query OK, 0 rows affected (0.01 sec)
17.minion上启动主从备份
MariaDB [masterdb]> slave start; Query OK, 0 rows affected, 1 warning (0.00 sec)
18.查看slave状态
MariaDB [masterdb]> show slave status\\G #不能出现分号
19.出现以下,则说明配置成功!
20.测试,在master插入一条数据
而在minion可以查到
Django读写分离配置
DATABASES = { \'default\': { \'ENGINE\': \'django.db.backends.mysql\', \'NAME\': \'masterdb\', \'HOST\': "192.168.29.201", "USER": "root", "PASSWORD": "123456" }, \'db2\': { \'ENGINE\': \'django.db.backends.mysql\', \'NAME\': \'masterdb\', \'HOST\': "192.168.29.129", "USER": "root", "PASSWORD": "123456" } }
自动读写分离
1、同步数据库表:
python manage.py makemigrations
python manage.py migrate --database default
python manage.py migrate --database db2
2、通过配置数据库路由,来自动实现,这样就不需要每次读写都手动指定数据库了。数据库路由中提供了四个方法。这里这里主要用其中的两个:def db_for_read()
决定读操作的数据库,def db_for_write()
决定写操作的数据库。
新建router.py
脚本,定义Router类:
class Router: def db_for_read(self, model, **hints): return \'db2\' def db_for_write(self, model, **hints): return \'default\'
配置Router ,在settings.py
中指定DATABASE_ROUTERS
DATABASE_ROUTERS = [\'router.Router\',]
手动读写分离
在使用数据库时,通过.using(db_name)
来手动指定要使用的数据库
models.Products.objects.using(\'default\').create() # 写 models.Products.objects.using(\'db2\').all() #读
以上是关于基于CentOS7的MySQL数据库主从备份的主要内容,如果未能解决你的问题,请参考以下文章
web服务文件更新自动同步数据库主从复制shell脚本实现网站代码备份和mysql备份