淘宝建设网站首页,百度网盟推广费用投入,网站接电话,工作室注册流程目录 环境介绍读写分离纵向扩展横向扩展 数据库主从准备环境主库环境(master)从库配置(slave)状态分析重新配置问题分析 报错解决从库验证 有数据的情况下 去做主从清理环境环境准备数据库中的锁的机制主库配置从库配置最后给主库解锁常见错误 环境介绍
将一个数据库的数据 复… 目录 环境介绍读写分离纵向扩展横向扩展 数据库主从准备环境主库环境(master)从库配置(slave)状态分析重新配置问题分析 报错解决从库验证 有数据的情况下 去做主从清理环境环境准备数据库中的锁的机制主库配置从库配置最后给主库解锁常见错误 环境介绍
将一个数据库的数据 复制到另外一个 或者多个
master 主库
slave 从库
主库开了一个二进制日志
从库开了两个线程
LO可以是多线程(快) 请求二进制文件
SQL 线程 执行sql 语句
读写分离
所有写入的数据 在主库上写 所有读取在从库上读取
纵向扩展
一台不行 用两台
横向扩展
提升一台服务器的配置
数据库主从
准备环境
关闭防火墙关闭selinx固定IP配置dns 在目录 /etc/hosts 文件中开启 bin_log 咱文件 /etc/my.cnf在主库中授权用户
# 防火墙
systemctl stop firewalld# 关闭selinx
getenforce
setenforce 0# 固定IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33 rm -rf /etc/sysconfig/network-scripts/.cfg-ens33.swp
修改参数
BOOTPROTOstatic
----------------------------------------------------------------
IPADDR{ip}
PREFIX24
GATEWAY{网关地址}
DSN1{dns地址}
DSN1{dns地址}
----------------------------------------------------------------
参考
IPADDR10.12.155.146
PREFIX24
GATEWAY10.12.155.254
DNS1223.5.5.5
DNS2223.6.6.6----------------------------------------------------------------
# 参考实例
TYPEEthernet
PROXY_METHODnone
BROWSER_ONLYno
BOOTPROTOstatic
DEFROUTEyes
NAMEens33
DEVICEens33
ONBOOTyes
IPADDR192.168.100.203
PREFIX24
GATEWAY192.168.100.2
DNS1223.5.5.5
DNS2223.6.6.6
----------------------------------------------------------------# 重启
systemctl restart network# 修改主机名
hostnamectl set-hostname master# 主机名解析
涉及到几个ip 就要写多少个
实例
vim /etc/host
192.168.100.203 master
192.168.100.203 slave10.12.155.146 master
10.12.155.120 slave# 清理环境
# 卸载包
yum -y erase rpm -qa | egrep mysql|mariadb# 删除配置文件
rm -rf /etc/my* rm -rf /var/lib/mysql rm -rf /usr/bin/mysql# 检查
[[ ! -f /etc/my.cnf ]] [[ ! -d /var/lib/mysql ]] [[ ! -f /usr/bin/mysql ]] echo 环境已经清理完成 || echo 环境未清理# 安装mysql
yum -y install mysql-server...
## 本地安装
cd 解压包路径
yum -y localinstall *# 修改密码
## 查看密码
awk /temporary password/{p$NF}END{print p} /var/log/mysqld.log
## 修改密码为Baipiao123
mysqladmin -uroot -pawk /temporary password/{p$NF}END{print p} /var/log/mysqld.log password Baipiao123主库环境(master)
## 创建二进制文件目录
mkdir /data
chown mysql.mysql /data# 开启二进制日志
vim /etc/my.cnf
写在[mysqld] 标识下边 写道其他表示下边 就不生效了
server-id203
log-bin/data/mysql-binsystemctl restart mysqld# 授权一个账号开启一个复制权限msyql grant replication slave on *.* to master% identified by {密码}
msyql grant replication slave on *.* to master% identified by Baipiao123;
mysql flush privileges;
# 查看当前binlog 日志文件用的哪个 以及post
msyql show master status\G## 重新设置 设置轮转日志
mysql reset master; 从库配置(slave)
# 从库配置
vim /etc/my.cnf
server-id204
# 重启数据
systemctl restart mysqld# 主机名解析
10.12.155.146 master
10.12.155.120 slave可以使用 ? change master to 来查看语法
# 配置信息
change master to
master_host {解析的dns名},
master_port3306, // 这里是端口号
master_user{刚刚授权的用户名},
master_password{刚刚授权的密码},
master_log_filemysql-bin.000001, //bin_log 文件名字 不懂请看下图
master_pos154; //二进制日志 开始位置
master_connect_retry10; //十秒刷新## 实例
CHANGE MASTER TOMASTER_HOSTmaster,MASTER_USERking,MASTER_PASSWORDBaipiao123,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS145,MASTER_CONNECT_RETRY10;# 启动slave
msyql start slave;# 产看状态
msyqlshow slave status\GLO 和 SQL 都是yes 则说明配置成功# 如果uuid 一样的话
cat /var/lib/mysql/auto.cnf状态分析
## 14 15行。两个YES表示主从成功
## 关注39-42的信息
## 38行表示主从复制延迟时间
## 46 行UUID要不一致mysql show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: masterMaster_User: relicationMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 154Relay_Log_Space: 527Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 203Master_UUID: 6f6d0551-a073-11ee-9f28-000c298a6e96Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version:
1 row in set (0.00 sec)重新配置
如果配置出错了 才需要从这里开始 重新配置
mysqlstop slave;
mysql reset slave;
mysqlCHANGE MASTER TOMASTER_HOSTmaster,MASTER_USERmaster,MASTER_PASSWORDBaipiao123,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS154,MASTER_CONNECT_RETRY10;
## 启动slave
mysqlstart slave;
# 产看状态
msyqlshow slave status\G; 问题分析 报错解决
ip 地址 错误dns 没有配置ip配置用户名密码二进制文件配置UUID 一样 也会导致 失败
从库验证
最好在主库中写一下 再去 从库中看一下
# master_sql 在主库中写入如下内容
create database king;
create table king.t1(id int,myname varchar(40));
insert into king.t1 values (1,king);# clave_sql 在从库中查看写入的内容
show databases;use king;select * from king.t1;要往主库(master)里边写如果写在从库则会导致主键冲突有数据的情况下 去做主从
清理环境
此步骤是测试步骤 实战请跳过此处
yum -y erase rpm -qa | egrep mysql|mariadb# 删除配置文件
rm -rf /etc/my* rm -rf /var/lib/mysql rm -rf /usr/bin/mysqlrm -rf /data/*# 检查
[[ ! -f /etc/my.cnf ]] [[ ! -d /var/lib/mysql ]] [[ ! -f /usr/bin/mysql ]] echo 环境已经清理完成 || echo 环境未清理# 安装mysql
yum -y install mysql-server...
## 本地安装
cd 解压包路径
yum -y localinstall *## 启动数据库
systemctl start mysqld# 修改密码
## 查询密码
awk /temporary password/{p$NF}END{print p} /var/log/mysqld.log## 修改密码
mysqladmin -uroot -pawk /temporary password/{p$NF}END{print p} /var/log/mysqld.log password Baipiao123## 登录数据库
mysql -pBaipiao123环境准备
这里是模拟数据库中原有的数据
create database king;create table king.t1(id int, myname varchar(40));insert into king.t1 values (1,aaa),(2,bbb),(3,cccc),(4,dddd),(5,eee);select * from king.t1;数据库中的锁的机制
读锁
可以查询。
写锁
读写都不能执行。
主库配置
# 锁表备份## 备份文件为 all.sql
mysqldump -uroot -p{密码} -A all.sql
mysqldump -uroot -pBaipiao123 -A all.sql## 配置主从
### 创建必要目录
mkdir /data
chown mysql.mysql /data### 修改配置文件
vim /etc/my.cnf
server-id 203
log-bin /data/mysql-bin### 重启数据库
systemctl restart mysqld### 授权slave 用户
mysql grant replication slave on {库}.{表} to {用户名}% identified by {密码}
#### 实例
mysql grant replication slave on *.* to king% identified by Baipiao123;## 上一个读锁 () 到这里之后就不要动了 把这个窗口挂在这里mysql flush tables with read lock;-----------------------------------------------------------------------------------------------
# 再重新开一个窗口进行如下操作### 重置bin_log
mysql flush privileges;
### 查看主库 信息 已经bin_log 位置
mysql show master status\G;从库配置
## 传输数据
scp {备份文件.sql} {从库服务器}## 导入数据
mysql -uroot -p{密码} {备份文件}mysql -uroot -pBaipiao123 all.sql#配置从
vim /etc/my.cnf
在文件中写入下方内容 号码随意 不是1 就行
server-id 204# 重启数据库
systemctl restart mysqld# 主机名解析
vim /etc/host
{主库服务器ip} master
{从库服务器ip} slave##实例
192.168.100.203 master
192.168.100.203 slave# 进入数据库 配置从库
mysql -uroot -pBaipiao123## 查看格式 (show master to;)CHANGE MASTER TOMASTER_HOSTmaster,MASTER_USERking,MASTER_PASSWORDBaipiao123,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS720,MASTER_CONNECT_RETRY10;## 启动从库
mysql start slave;
## 查看主从信息
mysql show slave status\G;最后给主库解锁
配置完成之后 我们的主数据库 还是锁着的 这个时候就需要 给主数据库解锁了 就是哪个 刚开始 主服务器 挂在哪里的窗口
可以直接退出数据库
也可以使用命令来解锁
unlock tables;常见错误
如果出现这些错误编号则可能是如下错误
1062 主从重复 也就是说 从库插入了重复的数据 则可以跳过 具体还是需要做好分析
vim /etc/my.cnf
slave-skip-errors10621053 主服务器宕机1045 账号密码错误 导致的链接错误完结撒花 自强不息不忘初心 承蒙厚爱不负佳人