当前位置: 首页 > news >正文

MySQL学习笔记27

MySQL主从复制的核心思路:

1、slave必须安装相同版本的mysql数据库软件。

2、master端必须开启二进制日志,slave端必须开启relay log 日志。

3、master主服务器和slave从服务器的server-id号不能一致。

4、slave端配置向master端来同步数据。

master端必须创建一个复制用户。

保证master和slave端初始数据一致。

配置主从复制(slave端)。

MySQL主从复制的具体实现:

第一步:上传mysql软件包到master和slave服务器。

第二步:在Master端安装、初始化以及运行mysql软件。

安装要求:

vim mysql.sh

#!/bin/bash
yum install libaio -y
tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
rm -rf /usr/local/mysql
mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql &> /root/password.txt
bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
cp support-files/mysql.server /etc/init.d/mysqld
service mysqld start
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

然后是运行脚本:

sh mysql.sh

安全配置:

mysql_secure_installation

配置my.cnf(重点是开启二进制日志)

# cd /usr/local/mysql
# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/master.err
log-bin=/usr/local/mysql/data/binlog		=>	  一定要开启二进制日志
server-id=10
character_set_server=utf8mb4			 	=>    utf8mb4相当于utf8升级版
配置完成后,重启mysqld服务
# service mysqld restart
# chkconfig --add mysqld
# chkconfig mysqld on

在Slave从服务器端安装mysql软件(不需要初始化)。

安装mysql软件:

# vim mysql.sh
#!/bin/bash
yum install libaio -y
tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
rm -rf /usr/local/mysql
mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
cp support-files/mysql.server /etc/init.d/mysqld
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

相对于主服务器MySQL的安装与配置,从服务器端不需要进行初始化操作,因为其数据将来都来自于主服务器。

配置my.cnf文件:

# cd /usr/local/mysql
# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3310
log-error=/usr/local/mysql/data/slave.err
relay-log=/usr/local/mysql/data/relaylog			=>    	开启中继日志
server-id=100
character_set_server=utf8mb4

把master主服务器的数据目录同步到slave从服务器

 

a. 把MASTER服务器中的mysqld停止掉

# service mysqld stop

b. 把MASTER服务器中的/usr/local/mysql/data目录下的auto.cnf文件删除

# rm -rf /usr/local/mysql/data/auto.cnf

没安装一个mysql软件,其data数据目录都会产生一个auto.cnf文件,里面是一个唯一性的编号,相当于我们每个人的身份证号码。

c. 把MASTER服务器中/usr/local/mysql中的data目录拷贝一份到SLAVE从服务器的/usr/local/mysql目录

# rsync -av /usr/local/mysql/data root@10.1.1.100:/usr/local/mysql/

d. 同步完成后,把主服务器与从服务器中的mysqld启动

# service mysqld start
直接更改/usr/local/mysql目录的权限:
# chown -R mysql.mysql /usr/local/mysql

配置MASTER-SLAVE主从同步

a. 在MASTER主服务器中创建一个账号,专门用于实现数据同步

MySQL5.7及以下版本:

mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';

MySQL新版本中:

mysql> create user 'slave'@'10.1.1.%' identified by '123';
mysql> grant replication slave on *.* to 'slave'@'10.1.1.%';
mysql> flush privileges;

b. 在MASTER中锁表,然后查看二进制文件的名称及位置

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

在SLAVE从服务器中,使用change master to指定主服务器,并实现数据同步。

mysql> change master to master_host='192.168.17.126',master_user='slave',master_password='123',master_port=3306,master_log_file='binlog.000002',master_log_pos=601;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

启动slave数据同步:

mysql> start slave;
mysql> show slave status\G

主master服务器解锁:

mysql> unlock tables;

 

  1. 主从复制必须保证两台数据库实例的==server-id不一致==

  2. 主服务器==必须开启二进制日志==;从服务器==必须开启中继日志==

  3. 主从复制搭建==必须保证初始数据一致==

  4. 主服务器必须要给从服务器==创建一个复制用户,并授予复制权限==

  5. Master—>Slave架构,==主写会同步到从==;而==从写不会同步到主==

http://www.lryc.cn/news/181391.html

相关文章:

  • 数据结构与算法之字典: Leetcode 76. 最小覆盖子串 (Typescript版)
  • 2023-10-03 VsCode诡异消失事件
  • elementPlus表格组件el-table实现只能同时选择一行,全选按第一行处理
  • 栈的应用场景(三)
  • leetCode 45.跳跃游戏 II 贪心算法
  • 【MATLAB-基于直方图优化的图像去雾技术】
  • 读书笔记|《数据压缩入门》—— 柯尔特·麦克安利斯 亚历克斯·海奇
  • Pandas进阶修炼120题-第五期(一些补充,101-120题)
  • NPDP产品经理知识(产品创新管理)
  • Flutter+SpringBoot实现ChatGPT流实输出
  • 淘宝天猫粉丝福利购店铺优惠券去哪里找到领取网站?
  • 【考研复习】union有关的输出问题
  • Android学习之路(16) Android 数据库Litepal
  • Redis持久化(RDB/AOF)
  • 小谈设计模式(15)—观察者模式
  • 简单工厂模式 创建型模式(非GoF经典设计模式)
  • PE文件之导入表
  • 二、码制及其转换
  • 在pycharm中出现下载软件包失败的解决方法
  • 10.0 探索API调试事件原理
  • 文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题
  • 检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)
  • vtk 动画入门 1 代码
  • 【VR】【unity】如何在VR中实现远程投屏功能?
  • OpenGl材质
  • 背包问题
  • JavaSE | 初始Java(十一) | 抽象类和抽象接口
  • 产品经理如何科学的进行需求调研?
  • AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画
  • 玩具玩偶配送经营商城小程序的作用是什么?