主服务器负责写入数据,从服务器复制主服务器数据。
主从复制:从服务器复制主服务器数据
读写分离:不同的服务器,进行不同的操作,专门写的服务器,专门读的服务器,把读写操作,分配不同的服务器上。
主从复制使用范围:
- 主从复制之后,从服务器数据备份了主服务器的数据,所以从服务器可以作为备份数据的服务器
- 主从复制之后,为了实现业务上的读写分离操作
从服务器多于主服务器
mysql实现主从复制,需要开启二进制日志文件,从服务器通过日志文件和主从服务器赋予的服务器同步的操作权限,进行同步复制数据。
windows下配置
my.ini 配置进行修改
修改完成后重启mysql
查看配置重启之后,生成的日志文件
linux下配置
关于虚拟机网卡
桥接模式:直接把虚拟机的网络接物理网络里,和真实电脑在同一个IP段
NAT共享模式:在本地的电脑,建立一个局域网,虚拟机和真实网络不在一个IP段,本地电脑可以连接虚拟机,物理网络里的其他电脑不能够连接
这步骤会出现一些问题 出现下面的问题时候
需要把这两个服务打开 我在这浪费了好长时间!!
mysql增加用户和权限
正常运行环境中,数据库用户是有对应权限
①root用户权限最高,但是只允许本地登录
②如果需要进行远程登录(不在同一台主机里)可以创建新的用户,而不应该直接使用root用户
③特定的用户操作特定的数据库,一般一个业务使用一个数据库
语法:
grant all[权限] on 数据库.数据表 to '用户名称'@'主机名或者ip地址' identified by '用户密码';
1.创建可以远程登录的用户
登录命令:
-h 主机的ip地址 -u用户名称 -p用户密码
可以通过linux下的mysql客户端命令行测试登录win下的mysql
主从复制实施步骤
主从复制机制,需要最少两台服务器
主服务器 win 192.168.1.104
从服务器 linux 192.168.187.128
一般情况下搭建主从复制的mysql服务器,要求是服务器系统和数据版本系统是一致。
官方要求,最起码是数据库版本的大版本一致。
查看mysql的版本号
mysql > select version();
主服务器配置
①开启日志文件,并查看主服务器id
②增加同步用户
mysql > grant replication slave on *.* to 'slave'@'%' identified by '123456';
mysql > flush privileges;
③查看记录状态
mysql > show master status;
从服务器配置
①修改my.cnf配置文件
②重启mysql
[root@localhost ~]#service mysqld start --启动mysql 或者 /etc/init.d/mysqld start (关闭mysql #service mysql stop)
③登录mysql,停止从服务器的同步服务
mysql > slave stop;
④在从服务器,指定主服务器的位置,用户名,密码,日志文件,记录位置
语法:
change master to master_host=”主服务器的ip地址”,master_user=”授权同步用户的名称”,master_password=”授权同步用户的密码”,master_log_file=”二进制日志文件的名称”,master_log_pos=记录的pos位置;
mysql >change master to master_host='192.168.1.104',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1039;
⑤重新启动从服务器
⑥查看主从同步是否成功
在配置当中会存在,不能够同步的请情况,要从以下几个方法方面查看
- 确定指向的ip地址、日志文件、日志位置等信息是正确的
- 主服务器(win)防火墙的,测试中可以关闭防火墙
- 如果之前配置没有成功,下次从第④步开始配置
读写分离
php脚本实现
①传统的php脚本 mysql_connect() mysqli
创建两个mysql的连接,写用一个连接,读另外一个连接
封装一个类,建立两个连接,执行语句的方法,判断是什么操作,进行对应数据库的连接。
列如:
语句里包含select 字符串,就是一个读操作,就连接从数据库(读取数据)
其他语句到主服务器操作(写数据)
thinkphp5框架配置
②很多框架已经支持分布式部署数据库,可以使用tp的分布式数据库连接,进行读写分离测试。
文档说明
配置选项
建立一个数据表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`job` varchar(64) DEFAULT NULL COMMENT '工作',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8;
代码实现