mysql8在centos下主主复制配置

环境
centos 6( 192.168.10.69) ,centos7 (192.168.10.86) 两台虚拟机 

mysql版本 8.0.18,两台机器的mysql版本最好是一致,否则可能出现不成功的问题

目录

安装mysql

配置my.cnf

配置主机1

配置主机2

查看是否配置成功

遇到的问题

问题1:


安装mysql

下载mysql8 rpm包
centos6
https://repo.mysql.com//mysql80-community-release-el6-3.noarch.rpm

centos7
https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

安装下载的rpm 
rpm -ivh mysql80-community-release-el7-3.noarch.rpm

安装mysql-community-server
yum install mysql-community-server

配置my.cnf

修改配置文件
/etc/my.cnf

[mysqld]
#新的密码验证方式可能出现一些兼容性问题
default_authentication_plugin=mysql_native_password
user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld

#以下是同步需要的参数
log-bin=mysql-bin
relay-log = mysql-relay-bin
server-id=1
#忽略需要同步的表,mysql自带的一些表
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%


#主机2和主机1 的配置文件 my.cnf可以一致,只需要修改server-id

主机1代表centos 6
主机2代表centos7

配置主机1

启动主机1
service mysqld start

修改初始mysql用户密码,一般安装会写入/var/log/mysqld.log中,具体根据my.cnf 中log-error选项

一般就在mysql启动日志的前几行,我这里查询前十行
head -n10 /var/log/mysqld.log|grep root

找到了
A temporary password is generated for root@localhost: dd0wee.wvDlC

初始密码即为dd0wee.wvDlC

第一次使用root密码登录时,只能执行修改root密码选项,此时密码复杂度验证较高,需要大小写,长度,字符限制
#ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Aa123123!';
#ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123123';


降低密码验证复杂度,最小密码长度为8,可以设置validate_password.length参数使用更短密码
set global validate_password.policy=0;
set global validate_password.length=1;

#创建用于同步的用户 repl_user
create user 'repl_user'@'%' identified WITH mysql_native_password by '123123123';
grant replication slave on *.* to 'repl_user'@'%' ;
grant all on *.* to 'repl_user'@'%' ;
#刷新权限
flush privileges;

此时主机1已经配置完成

为了保证数据一致性,首先需要同步数据,简单方式,就直接拷贝整个数据文件夹到主机2
通过scp传输 主机1的datadir,也就是配置文件中配置的 /var/lib/mysql
压缩
tar -zcvf data.tar.gz /var/lib/mysql
scp传输到主机2的home目录
scp data.tar.gz [email protected]:/home

对于已有的数据库,也可以先导出sql语句,然后再主机2上导入。

配置主机2

my.cnf跟主机1一样,server-id必须不同


#创建 datadir /var/lib/mysql/
mkdir  /var/lib/mysql/
#修改所有者
chown mysql:mysql /var/lib/mysql/

#解压数据压缩包
tar -zxvf data.tar.gz
#移动到datadir
mv var/lib/mysql/* /var/lib/mysql/

#此时需要修改datadir中auto.cnf中保存的server_uuid
vi /var/lib/mysql/auto.cnf
server_uuid不能一致,可以只改末尾一个字符

#启动主机2 mysql
service mysqld start

#登录主机2mysql,然后执行
show master status;
重点看
File 、position两列

这时登录主1 ,然后执行
change master to
master_host='192.168.10.86', 
master_port=3306, 
master_user='repl_user',
master_password='123123123',
master_log_file='mysql-bin.000011', 
master_log_pos=155; 

master_log_file、master_log_pos
为主机2中show master status; 查询到的结果

同样的在主机1中
show master status;
查看对应结果 在主机2 mysql中执行
change master to
master_host='192.168.10.69',
master_port=3306,
master_user='repl_user',
master_password='123123123',
master_log_file='mysql-bin.000013',
master_log_pos=155;

分别执行完成之后记得调用启动复制

start slave;

查看是否配置成功


show slave status\G; 
如果有
Master_Server_Id: 2
Master_UUID: 016baa31-f46f-11e9-9f9c-000c2958b8bb
这两行,代表配置正确。

切记要保证数据一致性,不然主机1有,主机2没有,此时删除主机1的数据,主机2找不到可以删除的数据,就会同步异常,无法继续同步新的数据。

 

遇到的问题


问题1:


MySQL复制错误 The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work 解析
datadir下面的auto.cnf中保存的server_uuid重复了
datadir/auto.cnf

你可能感兴趣的:(J2ee,mysql8,主主复制)