mysql主从复制搭建(普通安装和docker方式)

centos7普通安装

mysql下载

下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz。上传至linux机/opt 目录下

单机安装mysql

安装准备工作

tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

cd /usr/local

mv mysql-5.7.27-linux-glibc2.12-x86_64/ mysql-5.7.27

cd mysql-5.7.27/

mkdir data

yum list installed | grep mariadb #检查 linux 是否安装了 mariadb数据库

yum -y remove mariadb-libs.x86-64 # 有的话卸载掉,否则会和mysql冲突

useradd mysql # mysql用户和用户组,用于安装和使用mysql

groupadd mysql

切换到mysql-5.7.27/bin目录下执行mysql的mysqld 命令初始化数据库的基本信息

./mysqld --initialize --user=mysql --datadir=/usr/local/mysql-5.7.27/data --basedir=/usr/local/mysql-5.7.27
参数说明:
--initialize 初始化mysql,创建mysql的root, 随机生成密码。记住密码,登录msyql使用。
--user执行msyqld 命令的linux用户名
--datadir : mysql数据文件的存放位置,目录位置参照本机的设置。
--basedir : msyql安装程序的目录,目录位置参照本机的设置。
该命令执行后,会生成一个临时的mysql数据库root用户的密码,请先拷贝出来记住,后续第一次登录mysql
例如#/T3ds.jhdUM

启用安全功能:在服务器与客户机之间来回传输的所有数据进行加密。通过证书提供了身份验证机制,mysql命令程序,mysql_ssl_rsa_setup提供了开启数据加密功能,生成数字证书。在mysql-5.7.27/bin目录下执行命令

./mysql_ssl_rsa_setup --datadir=/usr/local/mysql-5.7.27/data

mysql安装后,需要更改mysql-5.7.27整个文件夹目录权限,更改所属的用户和组,是之前创建的mysql用户。执行命令

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

创建mysql配置文件(存在则替换掉),vi /etc/my.cnf,添加如下配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#跳过权限表校验
#skip-grant-tables
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql-5.7.27
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql-5.7.27/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 表名不区分大小写
lower_case_table_names=1
max_allowed_packet=16M
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql-5.7.27/data/mysqld.pid

启动MySQL服务,mysql-5.7.27/bin目录下执行命令

 ./mysqld_safe & #mysqld_safe程序会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它
 ps -ef | grep mysql # 查看mysql是否启动

重置mysql登陆密码和访问权限

./mysql -u root -p #输出之前生成的密码,进入mysql client

alter user 'root'@'localhost' identified by '123456'; #修改root账号的密码

grant all privileges on *.* to root@'%' identified by '123456';#远程客户端访问授权
具体参数意思如下:
	其中*.* 的第一个*表示所有数据库名,第二个*表示所有的数据库表
	root@'%' 中的root表示用户名
	%表示ip地址,%也可以指定具体的ip地址
exit #退出客户端

停止mysql

./mysqladmin -uroot -p shutdown #输入root密码退出

开放防火墙

firewall-cmd --zone=public --add-port=3306/tcp --permanent 
firewall-cmd --reload 

将mysql配置为一个服务,以方便管理,做一下操作后执行service mysqld start即可启动mysql ,service mysqld stop停止mysql。

cp /usr/local/mysql-5.7.27/support-files/mysql.server /etc/init.d/mysqld
vi /etc/init.d/mysqld #打开后设置basedir和datadir的路径
basedir=/usr/local/mysql-5.7.27
datadir=/usr/local/mysql-5.7.27/data

主从设置

进入master服务器,打开mysql客户端,在主数据库上创建同步账号后退出客户端

./mysql -u root -p #进入客户端
grant replication slave on *.* to 'repl'@'192.168.1.135' identified by '123456';
FLUSH PRIVILEGES; #注意授权的ip为从服务器的ip,%代表任何ip都可以使用

配置主节点,开启binlog,vi /etc/my.cnf,添加如下配置

log-bin=mysql-bin # 日志文件名前缀
server-id=1 # 在集群中的唯一id,值可以为1~2^32-1的整数

重启主节点mysql,进入客户端,查看主节点状态

show master status;#主要为了查看 当前二进制日志名和偏移量

配置从节点,添加配置,vi /etc/my.cnf

server-id=2

重启从节点mysql,进入从节点mysql客户端,执行 CHANGE MASTER TO 语句设置同步的主库

CHANGE MASTER TO MASTER_HOST='192.168.1.125',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
START SLAVE;#开启从库
show slave status #查看同步状态,SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启

在主库执行下列命令,查看从库是否产生对应的数据库、表和数据

CREATE DATABASE orders CHARACTER SET 'utf8';

use orders;

CREATE TABLE t_order (
order_id BIGINT PRIMARY KEY,
order_time DATETIME,
customer_id BIGINT,
order_amount DECIMAL(8,2)
);

docker容器快速搭建mysql主从

首先拉取docker镜像,我们这里使用5.7版本的mysql

docker pull mysql:5.7

然后使用此镜像启动容器,启动master容器

docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

进入容器

docker exec -it mysql-master /bin/bash

进入容器后,升级apt-get,安装vi编辑器

apt-get update #升级安装工具,需联网
apt-get install vim
exit #退出容器

根据修改后的容器创建新的镜像,避免重复下载和安装vi编辑器

docker commit dd16f3e7be05 localmysql:1.0

根据新镜像启动Slave:

docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d localmysql:1.0

进入master容器,打开配置文件 vi /etc/mysql/my.cnf,添加如下配置

[mysqld]
log-bin=mysql-bin # 日志文件名前缀
server-id=1 # 在集群中的唯一id,值可以为1~2^32-1的整数

进入mysql客户端 mysql -u root -p,执行如下命令创建同步账号

grant replication slave on *.* to 'root'@'%' identified by '123456';
FLUSH PRIVILEGES; #注意授权的ip为从服务器的ip,%代表任何ip都可以使用,root表示同步所使用的用户,也可以单独创建同步的用户

退出mysql客户端,重启mysql:service mysql restart,此时容器会退出,重新启动容器,并进入mysql客户端,查看master状态

show master status #记下file和position的值

进入slave容器,打开配置文件 vi /etc/mysql/my.cnf,添加如下配置

[mysqld]
server-id=2

重启mysql,此时容器会退出。查看master容器的ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id

启动slave容器并进入容器,进入mysql客户端,执行如下命令

CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
start slave;#开启主从
show slave status G #查看同步状态,SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启
原文地址:https://www.cnblogs.com/hhhshct/p/13862974.html