1. 主从原理
引用网上的图:
- 主服务器上面的任何休息都会通过自己的I/O thread线程保存在二进制日志(bin log)里面
- 从服务器上面也会启动一个I/O thread, 通过配置好的用户名和密码,连接主服务器上面请求二进制日志,然后把读取的二进制日志写到本地的一个Relay log(中继日志)里面。
- 从服务器上面同时启动一个SQL thread 定时检查relay log(这个文件也是二进制),如果发现有更新立即把更新的内容在本机的数据库上执行一遍。
2. 配置操作
2.1 Master节点配置`/etc/my.cnf`(master节点上执行)
-
vim /etc/my.cnf
-
-
[mysqld]
-
## 同一局域网内注意要唯一
-
server-id=100
-
## 开启二进制日志功能,可以随便去
-
log-bin=mysql-bin
-
## 复制过滤: 不需要备份的数据库, 不输出
-
binlog-ignore-db=mysql
-
## 为每一个session 分配的内存,在事务过程中用来存储二进制日志的缓存
-
binlog_cache_size=1M
-
## 主从复制的格式(mixed、statement、row,默认格式是statement)
-
binlog_format=mixed
2.2 Slave节点配置`/etc/my.cnf`(slave节点上执行)
-
vim /etc/my.cnf
-
-
[mysqld]
-
## 同一局域网内注意要唯一
-
server-id=102
-
## 开启二进制日志功能,以备Slave作为其他Slave的Master时使用
-
log-bin=mysql-slave-bin
-
## relay_log配置中继日志
-
relay_log=mky-mysql-relay-bin
-
## 复制过滤: 不需要备份的数据库, 不输出
-
binlog-ignore-db=mysql
-
## 如果需要同步函数或者存储过程
-
log_bin_trust_function_creators=true
-
## 为每一个session 分配的内存,在事务过程中用来存储二进制日志的缓存
-
binlog_cache_size=1M
-
## 主从复制的格式(mixed、statement、row,默认格式是statement)
-
binlog_format=mixed
-
## 跳过主从复制中遇到的所有错误或者指定类型的错误,避免slave端复制中断
-
## 1062错误是指一些主键重复, 1032错误是因为主从数据库数据不一致
-
slave_skip_errors=1062
2.3 在Master服务器授权slave服务器可以同步权限(master节点上执行)
-
mysql -uroot -pmaster的密码
-
-
# 授予slave服务器可以同步master服务
-
-
grant replication slave, replication client on *.* to 'root'@'slave的ip' identified by 'slave服务器的密码';
-
-
flush privileges;
-
-
# 查看mysql 有哪些用户以及对应的ip权限
-
select user,host from mysql.user;
2.4 查看master服务的binlog文件名和位置(master节点执行)
show master status;
2.5 slave进行关联master节点(slave节点执行)
- 进入到slave节点
- 开始绑定
-
# 根据上面的show master status 查出来的结果填写
-
change master to master_host='master服务器的ip', master_user='root', master_password='master密码',master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=621;
-
-
# 启动
-
start slave;
-
- 查看启动状态
-
# 查看启动状态 (必须两个yes IO_RUNNING, SQL_RUNNING 都是yes才算成功)
-
show slave status \G;
常见错误:
Slave_SQL_Running:No MYSQL镜像服务器因错误停止的恢复
解决方式:
-
stop slave
-
-
set global sql_slave_skip_counter=1;
-
-
start slave
-
-
show salve status \G;
Slave_IO_Running:No
解决方式:
-
# master节点运行
-
show master status;
-
-
-
# 从节点运行
-
-
stop slave
-
-
change master to master_log_file='上面查出的结果',master_log_pos=上面查出的结果;
-
-
start slave
-
-
show salve status \G;
文章来源: blog.csdn.net,作者:毛瞌羊,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/wh2691259/article/details/115047056