目录
1)windows下mysql主、windows下mysql从
都和《windows下mysql主、linux下mysql从》类似的配置
一、概念
1)读写分离
一台服务器的数据库B负责读,另一台服务器的数据库A负责写(增删改),是分开的
2)主从复制
1.定义
主服务器数据库A负责写,从服务器数据库B负责读。主服务器数据库B的数据变化会实时同步到从服务器数据库B,从服务器数据库B始终和主服务器数据库A的数据保持一致
2.实现原理
A有一个日志功能,把自己所做的增删改(Insert、Delete、Update)的动作,全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了
3.主从复制的意义
避免单点故障。主从集群中任意一台服务器硬盘坏了,其他服务器上还有一模一样的数据,不影响
4.特点
A是master,B是slave
每个slave只能有一个master。(一对一)
每个master可以有多个slave。(一对多)
5.缺点
只能master到slave,单向同步
二、windows下mysql主、linux下mysql从
1)主服务器master配置
1.修改my.ini
windows版的mysql配置文件是my.ini,位于安装目录。
在my.ini的[mysqld]后添加:
server-id=1 #指定当前服务器唯一标识id(可以随便起,只要不重复就行)
log-bin=mysql-bin #二进制日志文件存放路径#binlog-do-db=test #待同步的数据库,不设置默认同步所有
# 不同步的数据库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
read-only=0 #读和写都可以
2.重启mysql服务
在windows服务中,右键重启mysql服务
3.创建slave同步master的账号
在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。
mysql> GRANT replication slave ON *.* TO 'slave'@'%' identified by '1234';

4.查询master配置状态
mysql> show master status;
2)从服务器slave配置
1.修改my.cnf
linux版的mysql配置文件是my.cnf,位于 /etc/my.cnf 或 /etc/mysql/my.cnf路径下。
vim /etc/mysql/my.cnf:
添加:
[mysqld]
server-id=10 #指定当前服务器唯一标识id(可以随便起,只要不重复就行)
log-bin=mysql-bin #[不是必须]启用二进制日志
#binlog-do-db=test #待同步的数据库,不设置默认同步所有
# 不同步的数据库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
2.重启MySQL服务
service mysql restart
3.关闭slave同步
mysql>stop slave;
4.开始配置
mysql>change master to
master_host='192.168.5.44', //填master服务器的ip地址
master_user='slave',
master_password='1234',
master_log_file='mysql-bin.000007', //填show master status;查出来的master配置状态信息
master_log_pos=107; //填show master status;查出来的master配置状态信息
5.启动slave同步
mysql>start slave;
6.检查从服务器slave状态
mysql> show slave status; //最好用客户端工具登入,在客户端查询界面里查看,才显示正常
7.在防火墙中开启3306端口
如果执行了前三个步骤仍然不能远程访问mysql,那么有可能是防火墙阻止访问,需要开启允许访问。
sudo ufw allow 3306
8.创建一个只读帐号
GRANT Select ON *.* TO reader@"%" IDENTIFIED BY "123456"
为什么要创建只读账号?
因为如果不是只读账号登录,可能会不小心增删改了数据库,而一旦从服务器修改了数据库,主从同步就会失效,master就不会实时同步到slave了
##如果抱错 [Err] 1045 - Access denied for user 'root'@'%' (using password: YES)
##解决办法
mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
mysql> flush privileges;
[root@localhost root]# systemctl restart mysql # 切记需要重启mysql服务
本文详细介绍了MySQL的主从复制实现读写分离的原理和步骤,包括在Windows下MySQL为主,Linux下MySQL为从的配置,强调了主从复制的意义、特点和缺点。同时,给出了创建只读账号以防止从服务器意外修改数据导致主从同步失效的注意事项。
988

被折叠的 条评论
为什么被折叠?



