怎么做学校官方网站,永久免费国外vps无需信用卡,2017年网站建设招标书,怎么装字体到wordpress1.为什么要做主从复制#xff08;主从复制的作用#xff09;
做数据的热备#xff0c;作为后备数据库#xff0c;主数据库服务器故障后#xff0c;可切换到从数据库继续工作#xff0c;避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高#xff0c;单机无法满…1.为什么要做主从复制主从复制的作用
做数据的热备作为后备数据库主数据库服务器故障后可切换到从数据库继续工作避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高单机无法满足此时做多库的存储降低磁盘I/O访问的评率提高单个机器的I/O性能。 读写分离使数据库能支持更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢导致锁表影响前台服务。如果前台使用master报表使用slave那么报表sql将不会造成前台锁保证了前台速度。 1--在从服务器可以执行查询工作(即我们常说的读功能)降低主服务器压力;主库写从库读降压 2--在从主服务器进行备份避免备份期间影响主服务器服务;确保数据安全 3--当主服务器出现问题时可以切换到从服务器。提升性能 2.什么是主从复制?
主从复制是用来建立一个和主数据库完全一样的数据库环境称为从数据库。在赋值过程中一个服务器充当主服务器而另外一台服务器充当从服务器。 当一台从服务器连接到主服务器时从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新然后锁住并等到主服务器通知新的更新。
3.主从复制的原理
步骤一主库db的更新事件(update、insert、delete)被写到binlog(二进制日志) 步骤二从库发起连接连接到主库 步骤三此时主库创建一个binlog dump thread线程把binlog的内容发送到从库 步骤四从库启动之后创建一个I/O线程读取主库传过来的binlog内容并写入到relay log(中继日志). 步骤五还会创建一个SQL线程从relay log里面读取内容从Exec_Master_Log_Pos位置开始执行读取到的更新事件将更新内容写入到slave的db.
4 mysql主从搭建 搭建步骤 准备两台机器 mysql的docker镜像模拟两台机器 -主库8.130.125.9 33307 121.196.246.157 33307 -从库8.130.125.9 33306 121.196.246.157 33306 第一步拉取mysql5.7的镜像
docker pull mysql:5.7 第二步创建文件夹,文件目录映射 mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/ #主库存放数据的
touch /home/mysql/my.cnf #主库配置文件mkdir /home/mysql1
mkdir /home/mysql1/conf.d
mkdir /home/mysql1/data/ #主库存放数据的
touch /home/mysql1/my.cnf #主库配置文件 第三步重要编写mysql配置文件(主从) #### 主的配置####
[mysqld]
usermysql
character-set-serverutf8
default_authentication_pluginmysql_native_password
secure_file_priv/var/lib/mysql
expire_logs_days7
sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections1000server-id100 #server-id自己写不能重复 id号唯一的
log-binmysql-bin #开启binlog日志 将sql语句写进去然后给从库[client]
default-character-setutf8[mysql]
default-character-setutf8 从库配置
[mysqld]
usermysql #mysqld用mysql用户跑
character-set-serverutf8 #编码是 utf8
default_authentication_pluginmysql_native_password #密码加密方式
secure_file_priv/var/lib/mysql #文件存放位置
expire_logs_days7 #日志存放时间 sql严格模式
sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections1000 #最多的连接数server-id101 #server-id自己写不能重复 id号唯一的
log-binmysql-slave-bin #开启binlog日志 和主库优点不一样
relay_logedu-mysql-relay-bin #开启中继日志[client]
default-character-setutf8 #client指定utf8[mysql]
default-character-setutf8 #mysql指定utf8 第四步 :启动mysql容器并做端口和目录映射 启动主库
docker run -di -v /home/mysql/data/:/var/lib/mysql-v /home/mysql/conf.d:/etc/mysql/conf.d-v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306
--name mysql-master -e MYSQL_ROOT_PASSWORD123456 mysql:5.7 启动从库
docker run -di -v /home/mysql1/data/:/var/lib/mysql-v /home/mysql1/conf.d:/etc/mysql/conf.d
-v /home/mysql1/my.cnf:/etc/mysql/my.cnf -p 33306:3306--name mysql-slave -e MYSQL_ROOT_PASSWORD123456 mysql:5.7第五步 用cmd连接主库
mysql -uroot -P33307 -h 121.196.246.157 -p #ip地址
#在主库创建用户并授权
##创建test用户
create user test% identified by 123;
##授权用户
grant all privileges on *.* to test% ; #将所有的权限赋予给test用户
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status;
第五步连接从库
mysql -uroot -P33306 -h 121.196.246.157 -p#配置详解change master to master_hostMySQL主服务器IP地址, master_user之前在MySQL主服务器上面创建的用户名 master_password之前创建的密码, master_log_fileMySQL主服务器状态中的二进制文件名, master_log_posMySQL主服务器状态中的position值;change master to master_host121.196.246.157,
master_port33307,master_usertest,
master_password123,master_log_filemysql-bin.000003,master_log_pos0;#启用从库start slave;#查看从库状态如下图show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个参数是yes就意味这主从搭建成功
第六步在主库创建库创建表插入数据看从库 5.django实现读写分离
# 第一步配置文件配置多数据库
DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,},db1: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db1.sqlite3,}
}# 第二步手动读写分离
Book.objects.using(db1).create(name西游记)# 第三步自动读写分离
写一个py文件db_router.py写一个类
class DBRouter(object):def db_for_read(self, model, **hints):# 多个从库 [db1,db2,db3]return db1def db_for_write(self, model, **hints):return default# 第三步配置文件配置
DATABASE_ROUTERS [mysql_master_demo.db_router.DBRouter, ]# 以后自动读写分离
# 多从库负载
# 分库分表 DATABASES {# 主库default: {ENGINE: django.db.backends.mysql,NAME: zhu,USER: root,PASSWORD: 123456,HOST: 121.196.246.157,PORT: 33307,},# 从库db1: {ENGINE: django.db.backends.mysql,NAME: zhu,USER: root,PASSWORD: 123456,HOST: 121.196.246.157,PORT: 33306,},
}