- 实验思路:先配置好主服务器和从服务器的相关信息,然后启动MySQL的主从复制,再对主服务器的数据进行修改,观察从服务器是否可以监听到修改并及时对自己的数据库内容进行更改。
这里先对主服务器进行配置,具体实验流程如下:
(1)打开主服务器的my.ini文件,并修改对应的参数。这里对my.ini文件做的修改主要是设置server-id=1,并且开启MySQL的二进制日志,如图所示:
(2)重新启动MySQL80服务,确保更改生效。
(3)为了便于后续进行主从复制,需要给两个服务器配置相同的初始数据库example,主服务器执行source语句的结果如下图所示:
这里直接给出dbcreate.sql里面的内容,不用大家一个个用手敲了!
CREATE DATABASE IF NOT EXISTS `example` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `example`;
Create Table dept
(
Deptno int primary key,
Dname varchar(20),
Loc varchar(10),
sumsalary int,
persons int
);
Create Table emp
(
empno int primary key,
ename varchar(10),
Job varchar(10),
Mgr int,
Hiredate datetime,
Sal float,
Comm float,
deptno int ,
Foreign key (mgr) references emp(empno),
Foreign key (deptno) references dept(deptno)
);
insert into dept values(1,'Research','New York',0,0);
insert into dept values(2,'Office','New York',0,0);
insert into dept values(3,'Finance','Iowa',0,0);
insert into dept values(4,'Factory','Iowa',0,0);
insert into dept values(5,'Market','New York',0,0);
insert into emp values(1,'Smith','Manager',null,'2008-10-10',2345.9,200,1);
insert into emp values(2,'John','Manager',null,'2010-1-20',4345.9,600,2);
insert into emp values(3,'Allen','SALESMAN',1,'2015-10-10',1800,180,1);
insert into emp values(4,'Ward','CLERK',null,'2013-11-20',2345.9,300,3);
insert into emp values(5,'MARTIN','SALESMAN',1,'2014-1-10',2300,180,1);
insert into emp values(6,'KING','ANALYST',4,'2013-11-20',2745.9,300,3);
insert into emp values(7,'SCOTT','ANALYST',1,'2014-1-10',2600,280,1);
insert into emp values(8,'KING','ANALYST',2,'2013-11-20',2787,320,2);
insert into emp values(9,'JAMES','CLERK',1,'2014-1-10',2300,280,1);
insert into emp values(10,'BLAKE','SALESMAN',null,'2013-11-20',2587,290,4);
insert into emp values(11,'CLARK','SALESMAN',1,'2013-5-10',2300,280,1);
insert into emp values(12,'MILLER','SALESMAN',10,'2012-9-20',2587,290,4);
insert into emp values(13,'Ali','CLERK',1,'2013-5-10',2800,290,1);
insert into emp values(14,'Kong','ANALYST',2,'2014-9-20',3587,290,2);
insert into emp values(15,'Cheng','ANALYST',10,'2013-5-10',3800,340,4);
insert into emp values(16,'Wang','ANALYST',4,'2016-9-20',3887,290,3);
insert into emp values(17,'Zhangsan','Manager',1,'2013-7-10',2350,450,1);
insert into emp values(18,'Lisi','CLERK',10,'2015-4-20',2347,480,4);
insert into emp values(19,'Wangfang','ANALYST',1,'2013-5-10',3800,390,1);
insert into emp values(20,'Kongzi','Manager',2,'2012-9-20',3587,290,2);
insert into emp values(21,'Chengdong','SALESMAN',10,'2013-5-10',3800,340,4);
insert into emp values(22,'Hewang','ANALYST',4,'2016-9-20',3887,290,3);
(4)用主服务器创建一个新用户,并给其配置主从复制的权限,如图所示:
(5)刷新权限使其生效,如图所示:
(6)使用刚刚创建好的用户登录主服务器,确保可以正常登录,如图所示:
(7)此时再切换回root,便于后续操作(刚刚新建的用户slaa我记得是不能进行数据库修改操作的),如图所示:
(8)查看主服务的状态,记录下供配置从服务器使用,如图所示:
可以看到,此时的日志文件对应为mysql-bin.000001号日志,位置是3128
- 下面再对从服务器进行配置,具体实验流程如下:
(1)打开my.ini文件,设置server-id为2,并设置log-bin为"mysql_bin",然后重新启动MySQL80服务,如图所示:
注意1:我自己电脑上面的MySQL服务名称叫“MySQL80”,可能你们电脑上面的MySQL服务名叫“mysql”或者“mysql8”等等,具体是什么可以通过windows服务找到(即,按下win键,然后输入“服务”,就可以找到对应的程序,进去即可找到相应的服务名)
注意2:有些教程上面会让大家把从服务器的端口号修改为3308或者3307(区别于主库的3306),但我在做实验的时候发现不修改从库的port也是OK的!
(2)为便于后续实验,这里给从库也配置相同的数据库,即执行与主库相同的sql文件,如图所示:
(3)配置复制的参数,在配置以下信息之前一定要先关闭主从复制,然后再进行参数的配置,如图所示:
代码直接给大家,便于复制,注意了里面的参数要进行修改,修改OK之后直接在mysql登录的状态下运行即可
CHANGE MASTER TO
MASTER_HOST='10.65.246.82', // 这里要修改成主服务器的ip地址
MASTER_PORT=3306, // 这是主服务器的端口号,一般是3306
MASTER_USER='slaa', // 这里的用户名是上面刚刚创建的用户的用户名
MASTER_PASSWORD='123456', // 这里的密码是上面刚刚创建的用户的密码
MASTER_LOG_FILE='mysql-bin.000001', // 这是主服务器的日志名称,通过show master status;命令可以查到
MASTER_LOG_POS=3128; // 这是主服务器的日志的当前记录位置,通过show master status;命令可以查到
(4)开始从服务器上面的slave服务,如图所示:
(5)使用“show slave status\G;”命令查看主从复制是否已经成功,如图所示:
可以看到,Slave_IO_Running和Slave_SQL_Running都已经为YES,说明前面的配置等工作都是顺利无误的,主从复制已经成功。
接下来对数据库进行操作,验证主从复制是否可以顺利实现。
(1)在主服务器上面使用sql语句“update emp set sal=1314520 where ename=‘Zhangsan’;”修改员工Zhangsan的薪水为1314520 ,如图所示:
(2)查看从库中数据是否已经被修改,如图所示:
查询结果表明,从库中相应的数据已经被修改,说明主从复制确实已经成功实现,主服务器和从服务器可以正常进行工作。