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,说明主从复制已经开启