开发者学堂课程【MySQL 高级应用 - 索引和锁:主从复制】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/598/detail/8640
主从复制
内容介绍:
一、复制
二、一主一从常见配置
一、复制
1.复制的基本原理
slave 会从 master 读取 binlog 来进行数据同步。
(1)三步骤+原理图
只要主机对应了changes ,会把这个行为写进 Binary log 里面,右边有一个 IO , slaver 会照着这个日志操作,执行主机做的事情。主机做什么,slaver 就读什么,回传,然后写到中继日志里面,然后启动一个 sql 进行复制。总结起来,一共分为三步:
MYSQL 复制过程分成三步:
①master 将改变记录到二进制日志( binary log )。这些记录过程叫做二进制日志事件, binary log events ;
②slave 将 master 的binary log events 拷贝到它的中继日志( relay log );
③ slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MYSQL 复制是异步切串行化的。
2.复制的基本原则
(1)每个 salve 只有一个 master
(2)每个 slave 只能有一个唯一的服务器 ID
(3)每个 master 可以有多个 salve
3.复制的最大问题——延时
二、一主一从常见配置
1.mysql 版本一致且后台以服务器运行,严禁版本跨越太多。最好是装同一个版本。从机要复制主机的数据,最好是两机在同一网段。
2.主从都配置在[mysqld]结点下,都是小写。[mysqld] 是固定节点。
3.主机修改 my.ini 配置文件
(1)【必须】主服务器唯一 ID server-id=1
最好一号机是主机,
(2)【必须】启用二进制日志,前下之意,配法如下:
log-bin=自己本地的路径
/mysqlbin
例:log-bin=D:/devSoft/MySQLServer5.5/date/mysqlbin
(3)【可选】启用错误日志,也就是说执行错误的时候,最好有一个日志能够记录错误
log-err=自己本地的路径
/mysqlerr
例:log-err=D:/devSoft/MySQLServer5.5/date/mysqlerr
(4)【可选】根目录,类似 java home
basedir=”自己本地路径
”
例: basedir=”D:/devSoft/MySQLServer5.5/”
(5)【可选】临时目录,
tmpdir=”自己本地路径
”
例: tmpdir=”D:/devSoft/MySQLServer5.5/”
(6)【可选】数据目录
datadir=”自己本地路径
/Data/”
例:datadir=”D:/devSoft/MySQLServer5.5/Data”
(7)read-only=0
主机,读写都可以
(8)【可选】设置不要复制的数据库,例如出厂目录等,可以忽略
binlog-ignore-db=mysql
(9)【可选】设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
4. 从机修改 my.cnf 配置文件
(1)【必须】从服务器唯一 ID
(2)【可选】启用二进制日志(建议打开)
[root@atguigu~]# vim/ect/my.cnf
#replication master server(
default
)
#binary logging is required for replication
log-bin-mysql-bin
server-id=2
5. 因修改过配置文件,请主机+从机都重启后台 mysql 服务
[root@atguigu~]# vim/ect/my.cnf
[root@atguigu~]# service mysql stop
Shutting down MYSQL...
[root@atguigu~]# service mysql start
Starting MYSQL...
[root@atguigu~]# ps - eflgrep mysel
6. 主机从机都关闭防火墙
(1)windows 手动关闭
(2)关闭虚拟机 linux 防火墙 service iptables stop
7. 在 Windows 主机上建立账户并授权slave
(1)GRANT REPLICATION SLAVE ON *.* TO ’zhangsan’@’ 从机器数据库
IP’IDENTIFIED BY ‘123456’;
//授权复制给从机,允许从机以 ZHANGSAN 这个用户名,123456的密码登陆
Mysql>
GRANT REPLICATION SLAVE ON *.* TO ’zhangsan’@’ 192.168.124.9 ’ IDENTIFIED BY ‘123456’
C:
\users\admin>D:
D:\devsoft\mysqlserver5.5\bin>mysql - u root - p
Mysql>
GRANT REPLICATION SLAVE ON *.* TO ’zhangsan’@’192.168.14.167 ’ IDENTIFIED BY ‘123456’
如果执行完了,为了确保万无一失,最好刷新一下这个界面,使用:
flush privileges;
(2)查询 master 的状态
show master status;
//查看主机的状态
记录下 File 和 Postition 的值
File |
Postition |
Binlog_Do_DB |
Binlog_Ignore_DB |
Mysqlbin.000035 |
341 |
|
mysql |
此表格明确可以抄写的地方与位置。
(3)执行完此步骤后不要再操作主服务器 MYSQL,防止主服务器状态值变化
8. 在 Linux 从机上配置需要复制的主机
CHANGE MASTER TO MASTER_HOST=’192.168.14.165’,//
MASTER_USER=’zhangsan’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=’mysqlbin.具体数字
’
,
MASTER_LOG_POS=
具体值
改成:
MASTER_LOG_FILE=’mysqlbin.000035’,
MASTER_LOG_POS=341
;
[root@atguigu~]# mysql -uroot -p
启动从服务器复制功能
start slave;
show slave status\G
Waiting for master to send event
//已经待命状态
下面两个参数都是 Yes ,则说明主从配置成功!否则一定失败。
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
Mysql>create database mydb58
Query OK. 1 row affected (0.03 see)
Mysql>use mydb58
Database changed
Mysql>create table dog (id int not null, name varchar(20))
Mysql>insert into dog values (1,‘
ww1
’
)
Query OK. 1 row affected (0.14 see)
Mysql>select * from dog;
id |
name |
1 |
Ww1 |
1 row in set (0.04 see)
此时回到从机,查询:
Mysql> use mydb58
Database changed
Mysql>select * from dog;
id |
name |
1 |
Ww1 |
1 row in set (0.00 see)
9.主机新建库、新建表、insert 记录,从机复制
10.如何停止从服务复制功stop slave;
//把从机停掉
以上就是 mysql 的主从复制。