MySQL的Replication复制

单机多实例部署

创建mysql系统账户

useradd -s /sbin/nologin -M mysql

解压tar包

tar -zxvf mysql5.7.tar.gz
mv mysql5.7 /usr/local/mysql

创建路径并赋值

mkdir -p /usr/local/var/mysql1
mkdir -p /usr/local/var/mysql2
mkdir -p /usr/local/var/mysql3

touch /tmp/mysql1.sock
touch /tmp/mysql2.sock
touch /tmp/mysql3.sock

chown mysql:mysql /tmp/mysql1.sock
chown mysql:mysql /tmp/mysql2.sock
chown mysql:mysql /tmp/mysql3.sock

chown mysql:mysql -R /usr/local/mysql
chown mysql:mysql -R /usr/local/var/

配置my.cnf

[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=root
pass=passwd

[mysqld1]
port=3306
socket=/tmp/mysql1.sock
datadir=/usr/local/var/mysql1

[mysqld2]
port=3307
socket=/tmp/mysql2.sock
datadir=/usr/local/var/mysql2

[mysqld3]
port=3308
socket=/tmp/mysql3.sock
datadir=/usr/local/var/mysql3

[mysqld]

创建环境变量(在尾部添加)

vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH

生效

source /etc/profile

启动

mysqld_multi --defaults-extra-file=/etc/my.cnf start

查看状态

mysqld_multi --defaults-extra-file=/etc/my.cnf report
注:如果my.cnf中没有user和pass参数则mysqld_multi stop不能停止实例

MySQL Replication概述

MySQL复制是指从一个MySQL主服务器(Master)将数据复制到另一台或多台MySQL从服务器(Slave)的过程,将主数据库的DDL和DML操作通过二进制日志传到从服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。
在MySQL中,复制操作是异步进行的,Slave服务器不需要持续的保持连接用于接收Master服务器的数据。
MySQL支持一台主服务器同时向多台从服务器进行复制操作,从服务器同时可以作为其他从服务器的主服务器,如果MySQL主服务器访问量比较大,可以通过复制数据,然后在从服务器上进行查询操作,从而降低主服务器的访问压力,同时从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题。
MySQL数据库复制操作大致可以分成三个步骤:

  1. 主服务器将数据的改变记录到二进制日志(binary log)中。
  2. 从服务器将主服务器的binary log events复制到它的中继日志(relay log)中
  3. 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步

不同服务器之间实现主从复制

角色 ip
master 172.16.164.133
slave 172.16.164.136

主:

调整/etc/my.cnf

[mysqld]
datadir=/data
basedir=/usr/local/mysql
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
symbolic-links=0

log-bin=mysql-bin   # 必须打开binlog
server-id=1 # server-id与从不一致即可
read-only=0 # 0为可写,1为只读
binlog_format=row
binlog_row_image=minimal
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
[mysql]
default-character-set=utf8

重启mysql服务

登陆主端mysql,创建复制使用的账户并赋予权限:

mysql> create user 'repl'@'%' identified by 'p@ssw0rd';
mysql> grant replication slave on *.* to 'repl'@'%'; 

查看master参数

mysql> show master status;

返回:

File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000002 154

从:

调整/etc/my.cnf

[mysqld]
datadir=/data
basedir=/usr/local/mysql
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
symbolic-links=0

log-bin=mysql-bin
server-id=2
read-only=1
binlog_format=row
binlog_row_image=minimal
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
[mysql]
default-character-set=utf8

重启mysql服务

登陆mysql

mysql> stop slave;
mysql> change master to master_host='172.16.164.133',master_user='repl',master_password='p@ssw0rd',master_log_file='mysql-bin.000002',master_log_pos=154;
mysql> start slave;

查看slave参数

mysql> show slave status\G;

其中返回值中:
Slave_IO_Running,Slave_SQL_Running两个参数必须为Yes才能正常工作

你可能感兴趣的:(数据库,mysql,数据库,服务器)