1.什么是主从复制
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
2.主从数据库的好处和缺点
优点
容灾:做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
扩展:架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
锁表:读写分离,使数据库能支撑更大的并发。当复杂sql锁表时,不会影响查询业务
缺点
成本:主从数据库的存储是冗余存储的,同一份数据多分存储是对服务器资源的消耗来满足业务需求
主从不一致:采用异步赋值模式,会出现更新的数据在从库
host | IP |
master | 192.168.70.77 |
slave | 192.168.70.88 |
1.先修改mysql的配置文件
[root@localhost mysql]# vim /etc/my.cnf
2.在master服务器的配置文件里改这些
[mysqld]
server-id=1 ##代表服务节点的唯一标识,不能重复
log-bin=mysql-bin ##代表日志文件确定的前缀
log-slave-updates ##代表日志文件有变化从节点自动更新,告诉从服务器
slave-skip-errors=all ##让从节点跳过错误的语句
3.在slave服务器的配置文件里改这些
[mysqld]
server-id=2 ##代表服务节点的唯一标识,不能重复
log-bin=mysql-bin ##代表日志文件确定的前缀
log-slave-updates ##代表日志文件有变化从节点自动更新,告诉从服务器
slave-skip-errors=all ##让从节点跳过错误的语句
4.重启mysql服务
[root@localhost mysql]# systemctl restart mysql
5.登录mysql里查看server_id有没有成功
SHOW VARIABLES like 'server_id';
出现server_id 表现为成功
6.登录master服务器的mysql执行:
show master status;
注意:出现这个要记着。等下要用,告诉从节点从哪开始同步!
7.登录slave服务器的mysql执行:
change master to
master_host='192.168.70.77',//要同步的主服务器
master_user='root',//主服务器的账号
master_password='Root@123',//密码
master_log_file='mysql-bin.000001',//同步二进制日志文件名
master_log_pos=120;//从哪开始
8.开启同步
start slave;
9.查看节点状态
show slave status\G;
************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.70.77
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:
1.出现 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说名成功,
2.如果在搭建过程出现错误,比如slave_IO_running没有出现yes一般会有三种错误
防火墙错误、网络错误和在安装数据库的时候没有给远程连接
至此mysql的主从复制就部署好了 可以进行测试
mysql的读写分离
读写分离就是只在主服务器上写,只在从服务器上读,主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库
通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力
1.下载mycat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2.解压mycat
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3.配置mycat文件里的conf文件夹里的schema.xml文件
4.配置登录mycat的权限server.xml
<system>
<!-- 这里配置的都是一些系统属性,可以自己查看mycat文-->
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8mb4</property>
</system>
<user name="root">
<property name="password">root</property>
<property name="schemas">test_schema</property>
</user>
5.启动mycat
./mycat console
6.查看日志
tail -f ../logs/mycat.log
至此mycat读写分离就部署好了,可以使用项目连接Mycat配置的虚拟库,项目中连接的数据库绑定虚拟库,用户名和密码绑定Mycat的用户名和密码,执行增删改的操作是否修改的是master ,执行查询的操作是否为slave,测试环节可以修改slave以便看出来搭建是否成功!