mysql主从复制

1、数据库版本保持一致,查看命令:select version(); linux下还可用命令:status;

2、windows数据库为主机 192.168.1.103
linux数据库为从机:192.168.240.101

主机配置文件my.ini
查看binlog是否开启:
show variables like 'log_bin';
设置主服务器唯一ID(必须)
[mysqld]server-id=1
启用二进制日志(必须)
log_bin="C:ProgramDataMySQLMySQL Server 5.7logmysqlbin"
启用错误日志(可选)
log-err="C:ProgramDataMySQLMySQL Server 5.7logmysqlerr"
根目录(可选)
#basedir="C:/Program Files/MySQL/MySQL Server 5.7/"
临时目录(可选)
tmpdir="C:/Program Files/MySQL/MySQL Server 5.7/"
主机读写都可以(可选)
read-only=0
#设置不要复制的数据库(可选)
binlog-ignore-db=mysql
#设置需要复制的数据库(可选)
binlog-do-db=dbname

从机配置文件/etc/my.cnf
从服务器唯一ID(必须)
#server-id=1
server-id=2
启用二进制日志(可选)
log-bin=mysql-bin

主机从机mysql重启,关闭防火墙
虚拟机linux关闭防火墙 service iptables stop

windows主机建立账户并授权slave
cd C:Program FilesMySQLMySQL Server 5.7in
进入mysql
mysql -u root -p 输入密码hz2020
执行如下命令
GRANT REPLICATION SLAVE ON *.* TO 'huangz'@'192.168.240.101' IDENTIFIED BY '123456';
执行成功后
flush privileges;
查询master状态,记录File和Position的值
show master status;

Linux虚拟机
CHANGE MASTER TO MASTER_HOST='主机IP',MASTER_USER='huangz',MASTER_PASSWORD='123456',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;
进入msql,执行命令
CHANGE MASTER TO MASTER_HOST='192.168.1.103',MASTER_USER='huangz',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysqlbin.000001',MASTER_LOG_POS=3395;
启动从服务器复制功能
start slave;

查看配置是否成功 G,key-value键值对显示
show slave statusG

执行后下面两个参数都是Yes,说明主从配置成功
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
执行结果:
Slave_IO_Running: Connecting
如果两个有一个不是YES,需要先stop slave;
然后CHANGE MASTER TO MASTER_HOST='192.168.1.103',MASTER_USER='huangz',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysqlbin.000001',MASTER_LOG_POS=605;
依然不行
在主机数据库查看给从机分配的账号密码是否成功:
在mysql数据库用户表中查询:select user,host from user;

在从机上连接主机看是否能登录成功
mysql -uhuangz -p123456 -h192.168.1.103
ERROR 1130 (HY000): Host 'cizon-PC' is not allowed to connect to this MySQL server
通过查询语句
SELECT ip,HOST,host_validated,sum_connect_errors,count_authentication_errors FROM performance_schema.host_cache;
发现HOST值为cizon-PC
清除host_cache: flush hosts; 无效
更新HOST192.168.240.101为%后,虚拟从机可正常连接windows主机mysql:
UPDATE USER SET HOST = '%' WHERE USER = 'huangz';
FLUSH PRIVILEGES;

在主机建表测试
create database db_master_slave_test;
create table dog (id int not null,name varchar(128));
insert into dog values(1,'dog01');

停止从服务器复制功能
stop slave;

原文地址:https://www.cnblogs.com/huangzhen22/p/14378581.html