mysql主从复制搭建

1、主机准备

(1)

主机名称 ip
mysql_master  192.168.168.136
mysql_slave 192.168.186.137

 

 

(2)

关闭防火墙,关闭selinux。

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

(3)

修改/etc/hosts文件

 

 (4)

时间同步

yum -y install ntpdate

 ntpdate cn.ntp.org.cn

说明:保证两台服务器系统时间一致即可

2、主从复制的原理:

(1)slave端的io线程,向master端的binlog dump线程发送请求。

(2)master端binlogdump线程获取二进制文件信息(文件名和位置信息),发送给slave端的io线程。

(3)slave端的io线程获取到的内容依次写到slave端的relay log里,并把master端的binlog文件名和位置记录到master.info里。

(4)slave端的sql线程监测到relay log中内容更新,就会解析relay log 里更新的内容,并执行这些操作,从而达到和master端数据一致。

3、主从搭建步骤。

(1)master端搭建过程。

1、解压: 

tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

2、移动到安装目录,并改名为mysql

mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

3、创建mysql用户

useradd -r -s /sbin/nologin mysql

4、更改安装目录权限

chown -R  mysql.mysql /usr/local/mysql

5、卸载mariadb-libs软件包,删除/etc/my.cnf

 yum remove mariadb-libs -y

6、数据库初始化

cd /user/local/mysql

./scripts/mysql_install_db --user=mysql

7、systemd管理mysql

 (1)cp support-files/mysql.server /etc/init.d/mysql

 (2)[root@mysql_master mysql]# cat /etc/systemd/system/mysql.service
[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target
Alias=mysql.service

[Service]
User=mysql
Group=mysql

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables etc.
#ExecStartPre=/usr/bin/mysql-systemd-start pre

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld_safe

# Don't signal startup success before a ping works
#ExecStartPost=/usr/bin/mysql-systemd-start post

# Give up if ping don't get an answer
TimeoutSec=600

Restart=always
PrivateTmp=false

8、添加环境变量

vim /etc/profile

export PATH=$PATH:/usr/local/mysql/bin

source /etc/profile

启动mysql

systemctl start mysql

 

 修改master端配置文件

[root@mysql_master mysql]# egrep -v '^#|^$' my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
character_set_server=utf8mb4
log-bin=/usr/local/mysql/data/binlog
server-id = 10
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

开启binlog日志。

在相应的目录创建mysql.err日志文件

touch mysql.err

重启mysql

(2)slave端部署

1、解压

tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

2、移动到安装目录,并改名为mysql

 mv  mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

cp support-files/mysql.server /etc/init.d/mysql

3、创建mysql用户

useradd -r -s /sbin/nologin mysql

修改安装目录属组和属主

chown -R mysql.mysql /usr/local/mysql

cd /usr/local/mysql

cp support-files/mysql.server /etc/init.d/mysql

[root@mysql_master mysql]# cat /etc/systemd/system/mysql.service

[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target
Alias=mysql.service

[Service]
User=mysql
Group=mysql

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables etc.
#ExecStartPre=/usr/bin/mysql-systemd-start pre

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld_safe

# Don't signal startup success before a ping works
#ExecStartPost=/usr/bin/mysql-systemd-start post

# Give up if ping don't get an answer
TimeoutSec=600

Restart=always
PrivateTmp=false

(3)设置环境变量步骤通master端一样

4、slave端不需要初始化

(1)master端数据同步到slave端

   rsync -av /usr/local/mysql/data 192.168.186.137:/usr/local/mysql/

(2)建立配置文件

[root@mysql_slave mysql]# cat my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
character_set_server=utf8mb4
server-id=20
relay-log=/usr/local/mysql/data/relaylog

slave端创建日志文件

rm /etc/my.cnf

touch mysql.err

5、master端创建授权用户

(1)mysql> grant replication slave on *.* to 'slave'@'192.168.186.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

(2)master端进行锁表防止两端数据不一致

flush tables with read lock;

(3)查看二进制文件写到什么位置

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 | 120| | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

 (4)slave端设置

change master to master_host='192.168.186.136',master_user='slave',master_password='123',master_port=3306,master_log_file='binlog.000003',master_log_pos=120;

start slave;

 

(5)master端解表

    unlock tables;

(6)验证

master端创建数据库:

create database db_01;

slave端检查是都存在db_01库。

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_01 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.02 sec)

 

posted @ 2020-03-30 23:11  东东dd  阅读(145)  评论(0)    收藏  举报