Linux实战笔记-----mysql数据库主从复制

一、mysql安装部署

可以直接从官网下载

解压mysql 5.7版本安装包,5.7版本后的安装存在变化,分需要boost库的版本和不需boost库的版本

tar zxf mysql-boost-5.7.31.tar.gz 

下载gcc gcc-c++ 及cmake

yum install gcc gcc-c++ cmake -y

配置安装

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0/
make
make install

拷贝文件

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

修改my.cnf地址

vim /etc/my.cnf

在这里插入图片描述
将mysql命令加入系统全局变量

vim ~/.bash_profile
source ~/.bash_profile

在这里插入图片描述
添加msql用户

useradd -M -d /data/mysql -s /sbin/nologin mysql

创建mysql数据存储目录,修改所属组

 mkdir -p /data/mysql
 chown mysql.mysql /data/mysql/

初始化数据库

mysqld --initialize-insecure --user=mysql

在这里插入图片描述

进入存储目录,删除所有初始文件

cd /data/mysql
rm -fr *

重新创建用户,获得初始随机密码nWks8ha48J;-

mysqld --initialize --user=mysql

在这里插入图片描述
启动mysql,发现失败,原因是pid有问题

vim /etc/my.cnf

在这里插入图片描述
重启
在这里插入图片描述
修改密码

mysql_secure_installation

进入mysql,显示database

mysql -pwestos
show databases;

在这里插入图片描述
准备phpMyAdmin安装包,解压

unzip phpMyAdmin-5.0.2-all-languages.zip

创建软连接方便使用

cp -r phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html
ln -s /usr/local/nginx/html/phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html/phpMyAdmin

修改nginx配置,加入index.php,确保php模块也打开

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
打开nginx,浏览器访问http://172.25.34.1/phpMyAdmin
在这里插入图片描述
由于没有指定sock路径,此时无法登录,需要修改php主配置文件

vim /usr/local/php/etc/php.ini

在这里插入图片描述
在这里插入图片描述
重载php,重新登陆phpMyAdmin

systemctl reload php-fpm.service

在这里插入图片描述
用图形化界面建立名为zjm的数据库,user_tb表,进入mysql查看

mysql -pwestos
show databses;

在这里插入图片描述

mysql> use zjm;
mysql> show tables;
mysql> select * from user_tb;

在这里插入图片描述

二、mysql主从复制

从server1拷贝mysql安装目录、配置文件和启动文件到server2

scp -r /usr/local/mysql  server2:/usr/local/mysql
scp /etc/my.cnf server2:/etc/
scp /etc/init.d/mysqld server2:/etc/init.d/

把mysql命令加入全局环境变量

vim ~/.bash_profile
source ~/.bash_profile

创建用户,创建数据库存储目录,修改所属人和组

useradd -M -d /data/mysql -s /sbin/nologin mysql
mkdir -p /data/mysql 
chown mysql.mysql /data/mysql

初始化数据库

mysqld --initialize-insecure --user=mysql
/etc/init.d/mysqld start
mysql_secure_installation

在server1,修改配置重启mysql

vim /etc/my.cnf
/etc/init.d/mysqld restart

在这里插入图片描述
进入到mysql
在这里插入图片描述
创建一个用户,添加slave的权限,且是可以通过网络连接,在server2上测试是否能连接

grant replication slave on *.* to repl@'%' identified by 'westos';

在这里插入图片描述
修改server2的mysql配置文件,再次重启
在这里插入图片描述
将server1的mysql写入的数据先导入到server2的mysql

首先备份server1的数据
在这里插入图片描述
server2中,导入数据

mysqladmin -pwestos create zjm
mysql -pwestos zjm <dump.sql
mysql> select * from zjm.user_tb;

修改salve选择的master端,若有两个yes则成功

mysql> change master to master_host='172.25.34.1', master_user='repl', master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=437;
mysql> start salve;	
mysql> show slave status\G;	

在这里插入图片描述

三、Gtid实现主从复制

serevr1,server2互为master和slave

server1中修改mysql的配置文件,开启log-slave-updates和gid_mode功能
启用enforce_gtid_consistency功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行

vim /etc/my.cnf

在这里插入图片描述
重启,进入mysql

/etc/init.d/mysqld restart
mysql -pwestos

此时file已经变成了新的文件
在这里插入图片描述
server2中 修改mysql的配置文件,步骤同上

进入mysql,由于使用gtid,不需要指定日志文件和pos,MASTER_AUTO_POSITION = 1直接启用基于GTID的复制

stop slave;
change master to master_host='172.25.21.1', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;
start slave;
show slave status\G;

有两个yes,成功
在这里插入图片描述
server3快速配置mysql,步骤参上

回到server2,创建一个server3在同步server2的mysql时候的用户

grant replication slave on *.* to repl@'%' identified by 'westos';

备份mysql的数据,主从用了gtid时,用mysqldump备份时就要加–set-gtid-purged=OFF,否则你在主上导入恢复了数据,主没有了binlog日志,同步则不会被同步

mysqldump -pwestos 808bass --set-gtid-purged=OFF  >dump.sql
scp dump.sql server3:

server3中

mysqladmin -pwestos create zjm
select * from 808bass.user_tb;

进入数据库,修改master 指向ip 172.25.34.2

change master to master_host='172.25.34.2', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;

开启slave查看状态

start slave;
show slave status\G;

在这里插入图片描述

此时在server1的mysql插入数据

 insert into zjm.user_tb values ('11111');

server2查看数据是否同步
在这里插入图片描述

server3查看
在这里插入图片描述

四、mysql主从复制模式

1、默认异步复制

性能消耗低,但是容易出现主从数据唯一性问题

2、主从同步复制

数据完整性好,但是性能消耗高

3、主从半自动复制

介于上面两种之间。既能很好的保持完整性,又能提高性能

测试
首先在master端打开

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

在slave端打开

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看master插件状态,发现是关闭的

show status like 'rpl%';

在这里插入图片描述
启动插件

SET GLOBAL rpl_semi_sync_master_enabled =1;

在这里插入图片描述
打开slave端插件,发现仍然关闭

SET GLOBAL rpl_semi_sync_slave_enabled  =1;

在这里插入图片描述
重新打开salve的io线程的thread

stop slave io_thread;
start slave io_thread;

在这里插入图片描述
在server1插入数据,可以看到有一个yes返回,没有no返回
在这里插入图片描述
此时slave数据已经复制完成
在这里插入图片描述
关闭slave的io_thread线程,再次在master插入数据,发现用时设置的超时时间为10s,等待十秒后,no返回1,yes不返回,切回默认主从异步复制

在这里插入图片描述
在这里插入图片描述
slave数据没有成功同步
在这里插入图片描述

再次打开io_thread,查看数据库内容,可以看到自动去匹配tgid然后复制缺少的数据
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值