1、拓扑图
2、原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
3、如何安装第二个mysql
1、同mysql5.7版安装教程第一步
2、同mysql5.7版安装教程第二步
3、用管理员身份运行cmd,执行mysqld --install命令(指定服务名)
mysqld --install MySQL8.0.17MASTER --defaults-file=“D:\development-software\mysql\one-master-one-slave\mysql-8.0.17-winx64-master\my.ini”
4、修改注册表
HKEY_LOCAL_MACHINE–>SYSTEM–>CurrentControlSet–>Services
找到刚才创建的MySQL8.0.17MASTER,将ImagePath修改成如下
D:\development-software\mysql\one-master-one-slave\mysql-8.0.17-winx64-master\bin\mysqld MySQL8.0.17MASTER
5、初始化
mysqld --defaults-file=D:\development-software\mysql\one-master-one-slave\mysql-8.0.17-winx64-master\my.ini --initialize --console
6、跳过密码登录
skip-grant-tables在8.0中已失效
可先停止mysql服务
在cmd中使用mysqld --console --skip-grant-tables --shared-memory
再另开cmd即可不用密码登录
7、修改密码
6、开启服务
net start MySQL8.0.17MASTER
7、naviat连接高版本mysql8.0报错2059解决办法
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; #更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限
4、删除服务命令
sc delete MySQL8.0.17MASTER
5、搭建主从复制
1、在主库上新建用于主从复制的账号
//创建账号
CREATE USER `mysql.replication`@`localhost` PASSWORD EXPIRE NEVER;
//授权
GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create User, Create View, Delete, Drop, Event, Execute, File, Grant Option, Index, Insert, Lock Tables, Process, References, Reload, Replication Client, Replication Slave, Select, Show Databases, Show View, Shutdown, Super, Trigger, Update ON *.* TO `mysql.replication`@`localhost`;
2、在主库上执行下面三个语句
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;
执行完后,在分别在命令行和navicat用mysql.replication用户登录,都能登录之后,再往下进行
3、在从库执行stop slave
4、在从库执行(注意:这里有个坑,最好手动拼写;在主库执行show master status可查看master_log_file和master_log_pos的值)
change master to
master_host='localhost',
master_port=3308,
master_user='mysql.replication',
master_password='ok',
master_log_file='mysql-bin.000029',
master_log_pos=155;
5、在从库执行start slave
6、验证:在从库执行show slave status\G,如果从库io线程和sql线程都是Running状态(即YES),表示主从复制成功