Mysql的主从复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql的主从复制相关的知识,希望对你有一定的参考价值。
mysql的主从复制
Mysql的主从复制,我们一般用来保证数据间的同步关系,比如有分公司,我们就需要把数据同步给千里之外的分公司,这样就很方便快捷。这个实验我们还实现了ssl安全连接,这样在同步的过程起到了安全保护数据的作用
我们这个实验用的mysql版本是5.7,相比较之前的版本会有一些不同
Mysql5.7 支持原生systemd
Mysql5.7 对于多核CPU、固态硬盘、锁有着更好的优化 更好的InnoDB存储引擎 更为健壮的复制功能
安装mysql:
我所用的系统环境:centos7.2x86_64,这个版本自带mariadb-libs,所以要把它卸载:
Rpm -aq | grep mariadb
安装依赖包:
安装cmake
【[email protected] ~】# tar zxf cmake-3.5.2.tar.gz
【[email protected] ~】# cd cmake-3.5.2/
【[email protected] cmake-3.5.2】# ./bootstrap
使用 gmake && gmakeinstall 编译
【[email protected] cmake-3.5.2】# gmake && gmake install
安装ncurses
【[email protected] ~】# tar zxf ncurses-5.9.tar.gz
【[email protected] ~】# cd ncurses-5.9/
【[email protected] ncurses-5.9】# ./configure && make && make install
安装bison
【[email protected] ~】# tar zxf bison-3.0.4.tar.gz
【[email protected] ~】# cd bison-3.0.4/
【[email protected] bison-3.0.4】# ./configure && make && make install
安装boost
【[email protected] ~】# tar zxf boost_1_59_0.tar.gz
【[email protected] ~】#cd boost_1_59_0/
【[email protected] boost_1_59_0】# cd
【[email protected] ~】#mv boost_1_59_0 /usr/local/boost
创建用户并添加到组
【[email protected] ~】# groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql
创建mysql安装目录和数据库目录
mkdir/usr/local/mysql ---创建目录
mkdir/usr/local/mysql/data ---数据库目录
编译安装mysql
我们可以使用make && make install 进行编译安装,不过这条命令是只用单线程,安装过程过于缓慢,用下面这条命令可以根据CPU核数指定编译时的线程数,大大提高了安装的速度
make -j $(grep processor/proc/cpuinfo | wc -l)
-j:根据CPU核数指定编译时的线程数
在安装所需模块的时候难免输入错误,当我们想重新运行cmake配置,需要删除CMakeCache.txt文件: #makeclean
#rm -f CMakeCache.txt
优化Mysql的执行路径
设置权限并初始化MySQL系统授权表
#cd /usr/local/mysql
# chown -R mysql:mysql . ---更改所有者,属组,注意是mysql .
注意:5.7.6之后版本初始系统数据库脚本(本文使用此方式初始化)
#/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
生成一条mysql的初始密码(注意保存),后面要用到!
创建配置文件
#cd /usr/local/mysql/support-files ---进入MySQL安装目录支持文件目录
#cp my-default.cnf /etc/my.cnf ---复制模板为新的配置文件,
修改文件中配置选项,如下图所示,添加如下配置项
#vi /etc/my.cnf
配置mysql自动启动
我们开启mysql服务是会报错,原因是在mysqld.service,把默认的pid文件指定到了/var/run/mysqld/目录,而并没有事先建立该 目录,因此要手动建立该目录并把权限赋给mysql用户;
解决方法有两个:
一是创建mysqld.service文件里指定的目录/var/run/mysqld并给属主权限:chown -R mysql:mysql/var/run/mysqld
二是修改/usr/lib/system/system/mysqld.service文件里的指定路径,写入一个已存在的路径
systemctl daemon-reload重新加载
再次启动mysql服务
连接数据库 ----密码是刚开的初始密码
修改库管理员用户root的密码
实现基于ssl安全连接的主从复制
1)在主mysql创建SSL/RSA文件
#cd /usr/local/mysql/bin ---切换目录
#mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data ---创建新的SSL文件
重启mysqld服务之前,我们要给server-key.pem权限
chmod +r /usr/local/mysql/data/server-key.pem
然后再重启服务 #systemctl restart mysqld
重启mysql服务,这时错误日志中就没有报错了
登录mysql,执行mysql>showvariableslike‘%ssl%‘;
从上图可以看到mysql支持了ssl安全连接
在主mysql上的操作完成,再生成一个复制帐号:REQUIRESSL
进入mysql :
Mysql -u root -p ‘123.abc’
Mysql>grant replication slave on *.* to ‘rep’@’192.168.1.%’identified by require ssl;
在主mysql上启用二进制日志并重启mysql服务
添加下面的配置项
Log-bin=mysql-bin
重启mysql
Systemctlrestart mysqld
进入mysql
Mysql-u root -p ‘123.abc’
查看master状态
Showmaster status;
注:要记住上图所显示的file和position的值,配置从服务器要用到防火墙允许3306/tcp通信
【[email protected] ~】# firewall-cmd --permanent --add-port=3306/tcp
【[email protected] ~】#firewall-cmd -reload
配置从服务器
##可以克隆主mysql,修改ip即可。
从mysql服务器 的/etc/my.cnf文件内容
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 2
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysqld.err
relay-log = /usr/local/mysql/data/relay-log-bin
relay-log-index = /usr/local//mysqldata/slave-relay-bin.index
注:server_id要唯一,不能和其他mysql主机的重复
把主mysql生成的证书给从服务器
在主mysql中的/usr/local/mysql/daata路径下执行scp;
【[email protected] data】# scp ca.pem client-cert.pemclient-key.pem r[email protected]:/usr/local/mysql/data/
注意:192.168.1.150是从mysql的ip,192.168.1.100是主mysql的ip地址。
!!!!!!设置client-key.pem的r权限,要不然无法使用私钥
重启mysql服务
Systemctl restrt mysqld
进入数据库
Mysql-u root -p‘123.abc’
查看SSL是否被支持
Show variables ‘%ssl%’;
要求:have-openssl YES
Have-ssl YES
那么在配置主从复制之前可以在从mysql上用SSL连接主服务器试试:
cd /usr/local/mysql/data
Mysql --ssl-ca=ca.pem ssl-cert=client-cert.pem ssl-key=client-key.pem -u rep
-p123456 -h 192.168.1.100
进入数据库后,使用\s查看数据库详细信息,会发现是主mysql的ip,ssl测试连接成功
最后开始配置主从replicate,登录从mysql,在从上mysql上执行:
开启从mysql服务器
注意:因为我们的从mysql是克隆的主mysql,所以我们要修改从mysql的uuid
路径是:/usr/local/mysql/daa/auto.cnf
修改完成之后重启mysqld服务
Systemctl restart mysqld
登录从mysql 执行
show slave status\G;
会发现:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
测试:在主mysql上创建库和表,在从mysql上会立刻进行同步!!!!
本文出自 “12977994” 博客,转载请与作者联系!
以上是关于Mysql的主从复制的主要内容,如果未能解决你的问题,请参考以下文章
Linux----------mysql主从复制和基于GTID主从复制