目录
一、主从复制优势
1. 可以进行读写分离操作,提高程序性能(主库写,从库读)。
2. 在主服务器进行备份,避免备份期间影响主服务器服务。
3. 当主服务器出现问题时,可以迅速切换至从服务器。
二、原理
1. 主服务器(mster) 将数据改变记录到二进制日志 (binary log) 文件中
2. 从服务器(slave) 将主服务器的binary log文件拷贝到自己的中继日志 (relay log) 中
3. 从服务器(slave) 重做中继日志中的事件 将改变应用到自己的数据库当中, mysql 复制是异步的且串行化的
三、操作
环境 contos7,至少两台
安装mysql 参考:https://www.cnblogs.com/helf/p/11244711.html
一、下载mysql5.7的rpm安装包
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads
下载对应的MySQL版本,要求版本必须大于5.6
二、将下载到的MySQL上传至服务器进行解压
[root@localhost src]# tar -xvf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
三、验证系统环境
- 删除mariadb
查看:[root@localhost bin]# rpm -qa|grep mariadb
卸载:[root@localhost bin]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
- 安装环境依赖
[root@localhost src]# yum install libaio
[root@localhost src]# yum install perl
[root@localhost src]# yum install net-tools
安装
[root@localhost src]# rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm
[root@localhost src]# rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm
[root@localhost src]# rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm
[root@localhost src]# rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm
报错
error: Failed dependencies:
mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-community-libs-5.7.19-1.el6.x86_64
解决方法
在语句后面加上 --nodeps --force,如 rpm -ivh mysql-community-libs-5.7.33-1.el7.x86_64.rpm --nodeps --force
查看状态、启动MySQL服务
#查看mysql启动状态
[root@localhost src]# service mysqld status
#启动mysql active(running)代表启动成功
[root@localhost src]# service mysqld start
修改MySQL root密码
#查看临时密码:得知临时密码就是如图
[root@localhost src]# grep password /var/log/mysqld.log
#用临时密码登录mysql
[root@localhost src]# mysql -uroot –p
#修改成新的密码
mysql> set password = password("Szfore_68638");
为root账户可以外部访问
# 需要登录MySQL 进行操作
use mysql;//切换值mysql表
update user set host="%" where user = 'root';//设置所有IP可以登录
FLUSH PRIVILEGES;//更新权限
为root账户设置主从备份权限
grant replication slave on *.* to "root"@"%" identified by "rootpassword";
FLUSH PRIVILEGES;
#root:root账户
#rootpassword:root密码
设置主从备份
1、关闭主服务器的防火墙
关闭防火墙:systemctl stop firewalld.service
查看防火墙状态:systemctl status firewalld.service
禁止开机启动:systemctl disable firewalld.service
2、如果是克隆的服务器,需要修改mysql uuid,不是则跳过
cd /var/lib/mysql/
vi auto.cnf
//修改server-uuid,随便修改一位,保证uuid唯一
3、打开主服务器(master),修改my.cnf
先去找 /etc/my.cnf 没有再去找 /etc/mysql/my.cnf,或者全局搜索
我的是在 /etc/my.cnf
在文件最后追加如下代码
server-id=1
log-bin= master-bin
binlog_do_db=study
binlog-ignore_db=mysql
read-only=0
解释:
server-id=1 // 复制组中的每台服务器都要配置唯一的 Server ID,取值范围是 1 到 (232)−1,你自己决定取值,必须保证值唯一
log-bin=master-bin // 日志文件名以 “master-bin” 作为前缀
binlog-do-db=finance_online // 要同步的 finance_online 数据库
如要同步多个数据库,就多加几个 replicate-db-db = 数据库名
binlog-ignore-db=mysql // 要忽略的数据库
read-only // 主机 读写都可以 (必须)
重启 mysql 服务器
service mysqld restart;
登录上 mysql 然后执行:show master status;
记住里面的 File 和 Position 的值 待会会用到!
4、打开从服务器(slave),修改my.cnf
先去找 /etc/my.cnf 没有再去找 /etc/mysql/my.cnf,或者全局搜索
我的是在 /etc/my.cnf
在文件最后追加如下代码
server-id=2
log-bin=slave-bin
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
重启 mysql 服务器
service mysqld restart;
登录上 mysql 然后执行:
停止slave
然后配置连接主服务器的信息,执行如下命令
CHANGE MASTER TO MASTER_HOST='192.168.40.133',
MASTER_USER='root',
MASTER_PASSWORD='rootpassword',
MASTER_LOG_FILE='master-bin.000002',
MASTER_LOG_POS=1196;
解释:
192.168.40.133 主服务器IP
root MySQL账户
rootpassword MySQL密码
master-bin.000002 主服务器登录MySQL执行(show master status;)查看到的File
1196 主服务器登录MySQL执行(show master status;)查看到的Position
启动slave
start slave;
查看slave状态
show slave status\G
这两处都为ok就算配置成功,就可以在主服务器设置的数据库里面操作sql语句,查看从服务器是否同步了
如果按照以上步骤操作,出现以下问题:
Slave_IO_Running:Connecting; Slave_SQL_Running:Yes的问题。
很有可能就是主服务防火墙问题,请确认主服务器防火墙是否关闭
Slave_SQL_Running: no
很有可能时uuid相同导致,请确保uuid不一致
5、配置双主
只需要在之前master的配置的基础上增加以下配置
log-slave-updates
auto-increment-increment=2
auto-increment-offset=1