主从复制 就是 把 主服务器(Master)上的 二进制日志文件(binlog,记录了所有修改数据库的操作)复制到 从服务器(Slave)上执行一遍,保证 从服务器 上的数据 和 主服务器 上的数据 保持一致。
工作过程:
补充:I/O 线程 和 SQL 线程

1、在 E 盘 建立 master 和 slave 目录
2、找到本机的 MySQL 安装路径 将 整体文件夹 压缩打包
3、将 压缩包 分别拷贝到 master 和 slave 目录下,并完成解压
4、配置 MySQL 的系统文件 my.ini
master 的 my.ini 配置
用 记事本(或其它编辑器)打开 master 根目录 下的 my.ini,在 [mysqld] 下 新增 log-bin=mysql-bin server-id=3306 并 保存关闭。
[mysqld]
log-bin=mysql-bin # 表示要生成的二进制日志文件名称
server-id=3306
slave 的 my.ini 配置
用 记事本(或其它编辑器)打开 slave 根目录 下的 my.ini,将 [client] 下 的 port(端口号)从 3306 改成 3307;将 [mysqld] 下 的 port 从 3306 改成 3307,新增 log-bin=mysql-bin server-id=3307 并 保存关闭。
[mysqld]
log-bin=mysql-bin
server-id=3307
port=3307
[client]
port=3307
5、启动 master 服务器,并创建一个专门用于复制的账户
打开命令窗口 cmd,进入 master 的 bin 目录,输入启动服务器的命令:mysqld --console,启动服务器
打开命令窗口 cmd,进入 master 的 bin 目录,输入 mysql -u root -p,登录到 master 服务器
创建 复制账号,用户名 repuser,密码 123
mysql>Create user 'repuser'@'localhost' identified by '123';
mysql>grant replication slave on *.* to 'repuser'@'localhost';
mysql>flush privileges;
mysql>show master status \G # 显示 master 状态; \G 以行进行显示,后面不用加';'


6、启动 slave 服务器,完成 slave 的配置
打开命令窗口 cmd,进入 slave 的 bin 目录, 输入启动服务器的命令:mysqld --console, 启动服务器
打开命令窗口 cmd,进入 slave 的 bin 目录,输入 mysql -u root -p 登录到 slave 服务器
完成 主从复制 的相关配置
mysql>change master to master_host='localhost',master_port=3306,master='repuser',master_password='123',master_log_file='mysql-bin.000001',mastet_log_pos=0;
启动 slave 并 检查其状态
mysql>start slave;
mysql>show slave status \G


注:检查 Slave_IO_Running 线程 和 Slave_SQL_Running 线程 是否都为 yes,如果是,表示 主从复制服务 已建立;如果否,表示 主从复制服务 未建立。
7、主从复制测试
(1)在 master 客户端,创建一个数据库 BankDB,创建成功后,在 slave 客户端 查看有没有出现 BankDB:show databases;
DROP SCHEMA IF EXISTS BankDB ;
CREATE SCHEMA IF NOT EXISTS BankDB default character set gbk;
USE BankDB;
Create table Bank(BankID int, Cname char(20), Balance decimal(10,2));
insert into Bank values (20181211,'张三', 20000);
insert into Bank values (20181212,'李四', 10000);
insert into Bank values (20181213,'王五', 20000);
master 客户端:

slave 客户端:

(2)在 master 客户端,修改 Bank 表的数据, 在 slave 客户端 查看是否更新成功
update Bank set Balance=Balance + 99;
master 客户端:

slaver 客户端:

(3)在 slave 关闭状态下(slave 客户端:stop slave,slave 服务端:Ctrl+C), 在 master 客户端 新建一个数据库 BankDB1;重新启动 slave,在 slave 客户端 查看有没有出现新建的数据库 BankDB1
DROP SCHEMA IF EXISTS BankDB1;
CREATE SCHEMA IF NOT EXISTS BankDB1 default character set gbk;
USE BankDB1;
Create table Bank(BankID int, Cname char(20), Balance decimal(10,2));
insert into Bank values (20181211,'张三', 20000);
insert into Bank values (20181212,'李四', 10000);
insert into Bank values (20181213,'王五', 20000);
master 客户端:

slaver 客户端:


