主从复制启动
需求:现需要将原windows与虚拟机Centos的主从复制转移,两台虚拟机上运行。已提前安装好Mysql,并将虚拟机CentOS克隆复制到运行
问题一:若完全克隆复制已安装好的虚拟机系统时,会导致两台服务器的MAC地址、ip地址、UUID相同,以及mysql里server的uuid也需改
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static #固定ip需将dhcp改静态
UUID生成下更新 #可使用命令:uuidgen ens33
HWADDR#随机生成[硬件-网络适配器NAT-高级-MAC生成新]
IPADDR=192.168.138.101 #service network restart 重启网络/systemctl restart network或者执行不了可重启服务器
mysql库里的uuid修改与上面生成的一致,文件在/var/lib/mysql/auto.cnf 并进行 systemctl restart mysqld 重启mysql服务。
问题二:网络互相ping不通,需要从虚拟网络编辑器VMnet8 改为NAT模式,子网IP为192.168.138.0,子网掩码 255.255.255.0 ,网关IP为192.168.138.1。其次进行本机设置 修改网络连接 Vmware Network Adapter VMnet8,开放防火墙即可网络联通
防火墙端口开放
添加:firewall-cmd --zone=public --add-port=3306/tcp --permanent
查看:firewall-cmd --zone=public --list-ports
更新:firewall-cmd --reload
数据库表没用户权限
mysql -u root -p
mysql> use mysql;
mysql> update user set Host='%' where User='root';
mysql> flush privileges; //用于重新加载权限表,无需重启MySQL(修改用户权限后刷新)
问题三:mysql8.0 基于日志(binlog)的主从(Master-Slave)复制方式,注意版本数据一致,server_id 唯一
主库执行以下:
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
log-bin=mysql-bin
server-id=100mysql> CREATE USER 'xiaozhang'@'192.168.138.101' IDENTIFIED with mysql_native_password BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'xiaozhang'@'192.168.138.101';//或者用@'%'所有用户
mysql> FLUSH PRIVILEGES;//刷新授权表信息
mysql> show master status;
从库执行以下:
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
log-bin=mysql-bin
server-id=101mysql> CHANGE MASTER TO MASTER_HOST='192.168.138.100',MASTER_USER='xiaozhang',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=856; //也执行此语句,可重新配置
mysql> show slave status\G;
mysql> start slave;
出现小问题A:
Slave_IO_Running: NO
IO NO eg: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
问题可采取下述修改:
主库操作执行-//在主库上执行刷新日志
mysql> flush logs;
mysql> show master status\G;
从库操作亦执行-//停止从库主从复制,并设置change
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_LOG_FILE='binlog.000007',MASTER_LOG_POS=156;
mysql> start slave;
mysql> show slave status\G
出现小问题B:
Slave_SQL_Running: NO
一般是事务回滚造成的,在从库中执行以下语句:
mysql> stop slave ; //修复完生产问题,数据修复之后恢复同步
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; --跳过一个事务,可选(在主从库维护中,需要跳过某个无法执行的命令)
mysql> start slave ;
mysql> show replica status\G;
附:其他需注意情况
NO.1 何时使用 RESET MASTER?
全新搭建主从复制环境:清除旧日志,从头开始同步。
清理历史二进制日志:例如完成大规模数据清理后,不再需要旧日志。
彻底重置主服务器状态:放弃所有复制相关的日志和位置信息。
NO.2 何时使用 RESET SLAVE?(reset slave all 全清空)
会使副本忘记其在Master的二进制日志中的复制位置,该语句旨在用于干净启动从副本
NO.3 数据修复,MySQL主从同步报错(数据不一致)
表结构和值较复杂,需在主库创建临时表并dump,在从库执行dump文件中的insert语句
主库执行:
mysql> create table backup like t_table;
mysql> insert into backup select * from t_table where t_id=18013;
mysql> commit
dump数据:
mysqldump -uroot -p d_databases backup> backup.sql