MySQL主从复制的优点:
1.实现读写分离,提高数据库的负载能力
2.实现数据库的异地备份
3.增加数据库的抗风险能力,主库与从库中的数据相同
MySQL主从复制实现原理:MySQL的二进制日志,即a库做什么操作,b库同步执行其操作。
window上安装多个MySQL(可跳过)
1.正常安装MySQL数据库
2.停止第一个MySQL服务
3.复制E:\mysql —>E:\mysql2
4.修改E:\mysql2下的my.ini文件
port=3307 # 数据库端口
server_id = 2 # 两个数据库的id不能相同
log-bin=mysql-bin # 二进制文件存放路径(主库配置文件检查是否正确)
basedir ="E:\mysql2"
datadir ="E:\mysql2\data\"
5.创建新的MySQL服务
管理员身份打开命令行窗口–安装新的MySQL服务
mysqld install MySQL2 --defaults-file=‘E:\mysql2\my.ini’
5.启动服务(控制面板新增加了一个服务)
启动原来的MySQL服务,新增加的MySQL2服务
6.修改注册表
HKEY_LOCAL_MACHINE–>SYSTEM–>CurrentControlSet–>Services
找到刚才创建的MySQL2,将ImagePath修改成如下":
路径+服务名称
E:\mysql2\bin\mysqld MySQL2
安装失败–可能是MySQL版本的问题,具体问题,具体分析
MySQL主从复制设置
在主数据库上给从服务器设置权限:
1.创建用户slave,密码 123456
mysql> create user 'slave'@'192.168.3.20' identified by '123456';
Query OK, 0 rows affected (0.60 sec)
2.分配权限
mysql> grant replication slave on *.* to 'slave'@'192.168.3.20';
Query OK, 0 rows affected (0.59 sec)
3.刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
4.查看master状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 771 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.02 sec)
从库连接主库
1.连接主库
mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.20',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=771;
Query OK, 0 rows affected (0.86 sec)
2.开启线程
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
3.查看状态
mysql> show slave status;
提示:当两者同为yes时,主从复制开始工作
Slave_IO_Running: Yes # 负责与主机的io通信
Slave_SQL_Running: Yes # 负责自己的slave MySQL进程
主从复制常见报错
1.Slave_IO_Running:No,
查看从库的日志,发现Error_code: 1593,提示说明主从服务器上的uuid相同(原因是第二数据库是从第一数据库复制过来的-所以参数完全相同)
解决办法:修改主库或者从库中的data文件夹中auto.cnf中的值,不能让他们完全相同
2.Slave_IO_Running:connecting—原因是 File 和 position 发生了变化。
解决办法:在从库上使用新的file和position值重新链接主库即可。
注:修改配置完成后,需要stop slave, start slave 才会生效