环境
两台MySQL数据库
mysql1 192.168.1.10 master
mysql2 192.168.1.20 slave
我这里用的是mariadb进行搭建,安装方法与其他方法会不同,但互为主从大致方法都是一样的
关闭防火墙、selinux
两台同样的配置
systemctl stop firewalld
systemctl disable firewalld
vi /etc/selinux/config
7 SELINUX=disabled
setenforce 0 #宽容模式
安装MariaDB
[root@mysql1 ~]# yum -y install mariadb*
[root@mysql2 ~]# yum -y install mariadb*
msyql1
vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql //这两行是默认MySQL位置,编译安装需要
socket=/var/lib/mysql/mysql.sock //自己指定,此安装的是mariadb
log-bin=my1log #指定binlog日志名称
server-id=1 #主机编号,第二台这里是2
#这两行加到配置文件的最下面可能会没有效果
保存退出
systemctl start mariadb
注意:如果不成功删除以前的binlog日志
进入mysql
创建用户
[root@mysql1 ~]# mysql
#给slave这个用户复制所有主机的权限,可以根据需求自己改
MariaDB [(none)]> grant replication slave,replication client on *.* to 'slave'@'%' identified by '1';
备份master的数据
[root@mysql1 ~]# mysqldump --all-databases --single-transaction --master-data=1 --flush-logs > /all.sql
将master的备份传给slave端
[root@mysql1 ~]# scp -r /all.sql 192.168.1.20:/
mysql2
vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=2 #这里改成2
~~log-bin=my1log #此时不用添加,使用双主的时添加这一行~~
保存退出
重启数据库
[root@mysql2 ~]# systemctl start mariadb
导入数据对数据进行同步
MariaDB [(none)]> source /all.sql
用从机的账户登陆(不是授权的账户哦)
指定主服务器信息
mysql >help change master to 查看从mysql编辑文件
mysql > \e #写入下面配置
CHANGE MASTER TO
MASTER_HOST='192.168.1.10', #master端ip地址
MASTER_USER='slave', #master端-授权用户名
MASTER_PASSWORD='1', #master端-授权用户密码
MASTER_PORT=3306, #master端数据库端口
MASTER_LOG_FILE='my1log.000005', #master端现行的日志文件
MASTER_LOG_POS=254, #master端现行日志文件所处的日志位置
MASTER_CONNECT_RETRY=10; #默认尝试次数(可以不写)
//查看mysql1端现行的日志文件及所处的位置
// MariaDB [(none)]> show master status;
//+---------------+----------+--------------+------------------+
//| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
//+---------------+----------+--------------+------------------+
| my1log.000005 | 245 | | |
//+---------------+----------+--------------+------------------+
//1 row in set (0.00 sec)
启动服务
mysql> start slave;
//查看IO线程和SQL线程是否开启。如果没成功:删除从的binlog重启服务
mysql> show slave status \G;
//出现双yes表示主从以完成
Slave_IO_Running: Yes
Slave_SQL_Running: Yes