安装前清理
由于centos7中使用mariadb代替了MySQL,所以需要先清理mariadb
rpm -qa|grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
下载并安装mysql
下载并安装MySQL官方的 Yum Repository
wget -i -c https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
yum -y install mysql80-community-release-el7-1.noarch.rpm
安装MySQL服务器
yum -y install mysql-community-server
启动MySQL
systemctl start mysqld.service
systemctl status mysqld.service
Mysql****初始化配置
cat /var/log/mysqld.log | grep password
mysql在安装后会创建一个root@locahost账户,并且把初始的密码放到了/var/log/mysqld.log文件中;
登录并修改密码
mysql -u root -p
mysql -h192.168.88.52 -P3306 -ucp -pMyNewPass4!
ALTER USER ‘root’@‘localhost’ IDENTIFIED with mysql_native_password BY ‘MyNewPass4!’;
update user set host =’%’ where user =‘root’;
防火墙设置
关闭防火墙:systemctl stop firwalld
禁止防火墙开机启动:systemctl disable firealld
防火墙开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
防火墙重新载入设置:firewall-cmd --reload
使用navicat连接
如果提示 Host XXX is not allowed to connect to this MySQL server
use mysql;
select host from user where user =‘root’;
update user set host =’%’ where user =‘root’;
alter user ‘root’@‘localhost’ identified with mysql_native_password by ‘MyNewPass4!’;
如果出现 MySQL 连接出现 Authentication plugin caching_sha2_password cannot be loaded
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
flush privileges;
关闭
vi /etc/selinux/config
SELINUX=disabled
A服务器:192.168.88.52服务器,
B服务器:192.168.88.179服务器
配置由A—>B的主从同步
A服务器操作:
创建用户备份的用户
CREATE USER ‘cp_user’@‘192.168.88.179’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
GRANT REPLICATION SLAVE ON . TO ‘cp_user’@‘192.168.88.179’;
修改 MySQL配置文件:vim /etc/my.cnf,配置内容如下:
port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #开始binlog日志 log-bin=mysql-bin #设置binlog日志模式, #STATEMENT:记录的是数据库上执行的原生SQL语句 #ROW:记录的是数据表的行是怎样被修改的。 #MIXED:混合模式, #如果设置了这种格式,MariaDB / MySQL 会在一些特定的情况下自动从 STATEMENT 格式切换到 ROW 格式。 #例如,包含 UUID 等不确定性函数的语句,引用了系统变量的语句等等。 binlog_format=mixed #=================开启binlog #设置该数据库是否为只读库 0否1是 read-only=0 #服务器唯一表示,每台服务器必须配置不一样,最好不要为0 server-id=5 #需要备份的数据库名称(可选) binlog-do-db=test_db #表示自增字段每次递增的量 auto-increment-increment=2 #表示自增字段初始值,从1开始,不能超过auto-increment-increment auto-increment-offset=1
修改完毕保存后,重新启动mysql
service mysqld restart
登录mysql后,查询master状态
mysql -uroot -pMyNewPass4!
show master status
记住mysql-bin.000001和1554 这两个值,后续配置从服务器时会用到,这两个值可能会不一样 mysql-bin.000001:binlog文件的名称 1554:从文件什么位置开始读取 **B服务器操作:** - 修改 MySQL配置文件:vim /etc/my.cnf,配置内容如下: ```properties datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid log-bin=mysql-bin binlog_format=mixed server-id=12 #开启中继日志 replicate-do-db=test_db relay-log=mysql.relay.bin log-slave-updates=ON ``` - 登录MySQL后,执行同步命令 ```sql - CHANGE MASTER TO MASTER_HOST='192.168.88.52',MASTER_USER='cp_user',MASTER_PASSWORD='MyNewPass4!', master_log_file='mysql-bin.000001',master_log_pos=857; ``` 重启mysql,查询slave状态 service mysql restart mysql -uroot -pMyNewPass4! Show slave status\G
Last Error 为0 即可认为配置正确。 如果出现connection error 考虑关闭A服务器防火墙或清空iptables (iptables -F) - 测试 在A和B服务器上登陆MySQL运行如下脚本创建数据库test_db; ```sql CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci; ``` 单独在A服务器上创建表,并插入数据 ```sql USE test_db; CREATE TABLE user( id int not null auto_increment, user_name VARCHAR(50), password VARCHAR(10) , name VARCHAR(50), status VARCHAR(10) , constraint pk__person primary key(id) ); INSERT INTO user (`user_name`,`password`,`name`,`status`) VALUES('admin','admin','admin','1'); ``` 到B服务器上test_db中查看是否同步了相同的表和数据 已同步,则配置A—>B 的主从复制完成
配置由B—>A的主从同步
B服务器操作:
创建同步A服务器的用户
CREATE USER ‘cp_user’@‘192.168.88.52’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
GRANT REPLICATION SLAVE ON . TO ‘cp_user’@‘192.168.88.52’;
开启binlog
vim /etc/my.cnf 插入如下内容
#开启binlog read-only=0 binlog-do-db=test_db auto-increment-increment=1 auto-increment-offset=1
显示master状态
show master status
A服务器操作:
开启中继日志,添加如下配置
#开启中继日志 replicate-do-db=test_db relay-log=mysqld-relay-bin log-slave-updates=ON
执行同步命令
CHANGE MASTER TO MASTER_HOST='192.168.88.52',MASTER_USER='cp_user',MASTER_PASSWORD='MyNewPass4!', master_log_file='mysql-bin.000001',master_log_pos=857;
master_log_file和master_log_pos填入B服务器对应的master的值
查看slave状态
show slave status\G;
此时A—>B 和B—>A的同步均已完成