Linux中详细部署mysql主从

1.主从简介
在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患。
想几个问题:
用一台数据库存放数据,若此数据库服务器挂了导致数据丢失怎么办?
业务量大了,数据多了,访问的人多了,一台数据库无法保证服务质量了怎么办?



2.主从作用
实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务



3.主从形式

一主一从
主主复制
一主多从---扩展系统读取的性能,因为读是在从库读取的
多主一从---5.7版本开始支持
联级复制



4.主从复制原理

1.主库将所有的写操作记录到binlog日志中并生成一个log dump线程,通过log dump线程将binlog日志传给从库的I/O线程
2.从库生成两个线程,一个I/O线程,一个SQL线程
3.I/O线程去请求主库的binlog,并将得到的binlog日志写入到relay log (中继日志)文件中
4.SQL线程,会读取relay log 文件中的日志,并解析成具体操作,来实现主从的操作一致,达到最终数据一致的目的。



*5.主从复制配置
主从复制配置步骤:
1.确保从数据库与主数据库里的数据一样
2.在主数据库里创建一个同步账号授权给从数据库使用
3.配置主数据库(修改配置文件)
4.配置从数据库(修改配置文件)



环境说明:

数据库角色 IP 应用与系统版本 有无数据
主数据库 192.168.209.12 Centos7/redhat7/ mysql-5.7 无数据
从数据库 192.168.209.13 Centos7/redhat7/ mysql-5.7 无数据

需求:搭建两台mysql服务器,一台作为主服务器192.168.209.12,一台作为从服务器192.168.209.13,主服务器进行写操作,从服务器进行操作。
说明://分别在主从两台服务器上安装mysql-5.7版本

                  ** 主服务器和从服务器上分别都要安装mysql**
********************************mysql安装****************************
//关闭防火墙及selinux
//安装依赖 包
[[email protected] ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel

//创建用户和组
[[email protected] ~]# cd /usr/src/
[[email protected] src]# groupadd -r -g 306 mysql
[[email protected] src]# useradd -M -s /sbin/nologin -g 306 -u 306 mysql

//下载二进制格式的mysql软件包
[[email protected] src]# wget https://downloads.mysql.com/archives/get/file/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

//解压软件至/usr/local
[[email protected] src]# tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz  -C /usr/local/
[[email protected] src]# cd /usr/local/

//创建软连接
[[email protected] local]# ln -sv mysql-5.7.22-linux-glibc2.12-x86_64/ mysql

//修改目录/usr/local/mysql的属主属组
[[email protected] local]# chown -R mysql.mysql /usr/local/mysql
[[email protected] local]# ll /usr/local/mysql

//添加环境变量
[[email protected] ~]# ls /usr/local/mysql
[[email protected] ~]# echo ‘export PATH=/usr/local/mysql/bin:$PATH‘ > /etc/profile.d/mysql.sh
[[email protected] ~]# source /etc/profile.d/mysql.sh
[[email protected] ~]# echo $PATH 

//建立数据存放目录
[[email protected] ~]# mkdir /opt/data
[[email protected] ~]# chown -R mysql.mysql /opt/data/
[[email protected] ~]# ll /opt/
总用量 0
drwxr-xr-x. 2 mysql mysql 6 8月  19 13:20 data

//初始化数据库 注意这个命令后会生成临时密码 要记住 jd?ajfrKY4pQ
[[email protected] ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/

//配置mysql
//软连接
[[email protected] ~]# ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
[[email protected] ~]# echo ‘/usr/local/mysql/lib‘ > /etc/ld.so.conf.d/mysql.conf
[[email protected] ~]# ldconfig -v

//生成配置文件
[[email protected] ~]# cat > /etc/my.cnf << EOF
> [mysqld]
> basedir = /usr/local/mysql
> datadir = /opt/data
> socket = /tmp/mysql.sock
> port = 3306
> pid-file = /opt/data/mysql.pid
> user = mysql
> skip-name-resolve
> EOF

//配置服务启动脚本
[[email protected] ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[[email protected] ~]# sed -ri ‘s#^(basedir=).*#\1/usr/local/mysql#g‘ /etc/init.d/mysqld
[[email protected] ~]# sed -ri ‘s#^(datadir=).*#\1/opt/data#g‘ /etc/init.d/mysqld

//启动mysql
[[email protected] ~]# service mysqld start
[[email protected] ~]# ps -ef |grep mysql
[[email protected] ~]#  ss -antl
LISTEN      0      80                  :::3306                            :::*     

//修改密码 使用临时密码登入
[[email protected] ~]# mysql -uroot -p
jd?ajfrKY4pQ 这是以上步骤的临时密码
mysql> set password = password(‘lanzhiyong‘);

#############查看主库有哪些库###################3
[[email protected] ~]# mysql -uroot -p
Enter password:   //上面设置的密码

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

#####################查看从库有哪些库#############
[[email protected] ~]# mysql -uroot -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)

###############现在在主服务上添加四个数据库########
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lan                |
| lanzhiyong         |
| mysql              |
| performance_schema |
| sys                |
| zhi                |
+--------------------+
7 rows in set (0.00 sec)

//进入lanzhiyong数据库里添加一个lanzhi表
mysql> use lanzhiyong;
Database changed
mysql> show tables;
+----------------------+
| Tables_in_lanzhiyong |
+----------------------+
| lanzhi               |
+----------------------+
1 row in set (0.00 sec)

//查看表的内容
mysql> select * from lanzhi;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | lan  |   10 |
|  2 | cs   |   90 |
|  3 | lol  |   66 |
|  4 | pp   |   33 |
+----+------+------+
4 rows in set (0.00 sec)

//全备主库
//先退出之前的数据库,全备主库时需要另外打开一个终端,再开一台192.168.209.12 的服务器,给数据库加上读锁,避免在备份期间与其他人在写入导致数据不一致

   //加上读锁之后只能读不能写
 mysql> flush tables with read lock;
 Query OK, 0 rows affected (0.02 sec)

 //备份主库将备份文件传送到从库
[[email protected] ~]# mysqldump -uroot -p --all-databases > all.sql

[[email protected] ~]# scp all.sql [email protected]:/root/
The authenticity of host ‘192.168.209.13 (192.168.209.13)‘ can‘t be established.
ECDSA key fingerprint is                SHA256:lOImReX4QGLGm5Qibnn4osotw9PoMtSRGLRaK1JAs4w.
ECDSA key fingerprint is    MD5:e4:1a:5f:28:d1:e0:2a:28:50:1a:1e:9c:cd:23:03:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.209.13‘ (ECDSA) to the   list of known hosts.
[email protected]‘s password:
all.sql                                                        100%  784KB      24.4MB/s   00:00

//解除主库的锁表状态
  mysql> quit
Bye 

//从库 登入先 再读取主库传来的备份
[[email protected] ~]# mysql -uroot -p
Enter password:
mysql> source all.sql;
#读取了之后 主库的所有数据在从库上确保一致

//在主数据库里创建一个同步账号授权给从数据库使用
mysql> create user ‘repl‘@‘192.168.209.13‘ identified by  ‘repl123‘;
Query OK, 0 rows affected (0.01 sec)

//在主数据库授权复制给从数据库
mysql> grant replication slave on *.* to ‘repl‘@‘192.168.209.13‘;
Query OK, 0 rows affected (0.00 sec)

//刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

 ##############配置主数据库###################
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
log-error=/opt/data/mysql.log    //添加错误日志目录
user = mysql
skip-name-resolve

 #replication
log-bin=mysql_bin     //添加启用binlog日志
server-id=3                //添加数据库服务器唯一标识符,主库的server-id值必须比从库的大
[[email protected] ~]# service mysqld restart
[[email protected] ~]# ss -antl
  State      Recv-Q Send-Q   Local Address:Port                  Peer     Address:Port
LISTEN     0      128                  *:22                               *:*
LISTEN     0      100          127.0.0.1:25                               *:*
LISTEN     0      128                 :::22                              :::*
LISTEN     0      100                ::1:25                              :::*
LISTEN     0      80                  :::3306                            :::*  

//查看主库的状态
mysql> show master status;
+------------------+----------+--------------+------------------+---- ---------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

##################配置从数据库##################
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
log-error=/opt/data/mysql.log      //添加错误日志目录
user = mysql
skip-name-resolve

#replication
server-id=5                //添加从库的唯一标识符,从库的server-id值必须小于主库的值
relay-log=mysql_relay_log       //添加中继日志文件

[[email protected] ~]# service mysqld restart
[[email protected] ~]# ss -antl
    State      Recv-Q Send-Q   Local Address:Port                  Peer     Address:Port
LISTEN     0      128                  *:22                               *:*
LISTEN     0      100          127.0.0.1:25                               *:*
LISTEN     0      128                 :::22                              :::*
LISTEN     0      100                ::1:25                              :::*
LISTEN     0      80                  :::3306                            :::*     

//从库配置并启动从复制

mysql> change master to master_host=‘192.168.209.12‘,
    master_user=‘repl‘,
    master_password=‘repl123‘,
    master_log_file=‘mysql_bin.000001‘,
    master_log_pos=154;
  Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

//查看从服务器状态
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.209.12
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: mysql_relay_log.000003
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql_bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 740
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_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: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3
Master_UUID: 3bcb9f5a-b269-11e8-aeca-000c2947a37d
Master_Info_File: /opt/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log;   waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)

#######主库插入记录验证#########

//在主库里的lanzhiyong库里lanzhi表里添加几条记录,验证是否能同步
mysql> select from lanzhi;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lan | 10 |
| 2 | cs | 90 |
| 3 | lol | 66 |
| 4 | pp | 33 |
+----+------+------+
4 rows in set (0.01 sec)
mysql> insert into lanzhi (id,name,age) values (5,‘AA‘,23),(6,‘BB‘,45),(7,‘CC‘,100);
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings:
mysql> select
from lanzhi;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lan | 10 |
| 2 | cs | 90 |
| 3 | lol | 66 |
| 4 | pp | 33 |
| 5 | AA | 23 |
| 6 | BB | 45 |
| 7 | CC | 100 |
+----+------+------+
7 rows in set (0.00 sec)

############从库看是否同步###########3
mysql> select * from lanzhi;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lan | 10 |
| 2 | cs | 90 |
| 3 | lol | 66 |
| 4 | pp | 33 |
| 5 | AA | 23 |
| 6 | BB | 45 |
| 7 | CC | 100 |
+----+------+------+
7 rows in set (0.01 sec)

原文地址:http://blog.51cto.com/13833047/2171795

时间: 2024-10-08 10:52:31

Linux中详细部署mysql主从的相关文章

Linux中详细部署Cobbler安装的服务

1.cobbler简介Cobbler 是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装,重装物理服务和虚拟机,同时还可以管理 DHCP.DNS等.Cobbler 可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler_web),还提供了API接口,可以方便二次开发使用.Cobbler 是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理.Cobbler 内置了一个轻量级配置管理系统,但它也支持和其他配置管理系统集成,

在kubernetes集群中部署mysql主从

本文介绍在kubernetes环境中部署mysql主从集群,数据持久化采用nfs. 一.环境介绍Mysql版本:5.7 Mysql master节点: 主机名:vm1IP地址:192.168.115.5/24 Mysql slave节点: 主机名:vm2IP地址:192.168.115.6/24 NFS节点:主机名:vm2IP地址:192.168.115.6/24共享目录:/home/mysql_master./home/mysql_slave 二.准备mysql主从的镜像环境dockerfil

在 CentOS7 上部署 MySQL 主从

在 CentOS7 上部署 MySQL 主从 1 通过 SecureCRT 连接至 MySQL 主服务器: 2 找到 my.cnf 文件所在的目录: mysql --help | grep my.cnf 一般情况 my.cnf 都会位于 /etc/ 目录下: 3 用 vim 打开 MySQL 的配置文件 my.cnf: vim /etc/my.cnf 4 找到 [mysqld] 并在其后添加如下配置: # 唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值 server-

Linux环境下部署mysql异常问题:发现没有my.cnf文件

在linux系统上部署mysql,使用的版本为MySQL-5.6.34-1.rhel5.x86_64.rpm-bundle.tar,在Linux系统中解压,安装解压文件里的如下两个文件: (主要安装里面的这两个文件:MySQL-server-5.6.34-1.rhel5.x86_64.rpm.MySQL-client-5.6.34-1.rhel5.x86_64.rpm) 5.6版本的mysql 但是在Linux系统中自带mysql,如果安装的是5.6版本的mysql,最好不要卸载掉自带的mysq

SPARK在linux中的部署,以及SPARK中聚类算法的使用

目前,SPARK在大数据处理领域十分流行.尤其是对于大规模数据集上的机器学习算法,SPARK更具有优势.一下初步介绍SPARK在linux中的部署与使用,以及其中聚类算法的实现. 在官网http://spark.apache.org/上直接下载编译好的tar安装包可以加快部署速度. spark的运行依赖于scala2.10.4,注意此版本一定要正确,否则spark不能正确运行. 1.scala的安装很简单,在官网http://www.scala-lang.org上下载安装包,解压到任意路径后,在

部署mysql主从同步

部署mysql主从同步一.什么是mysql主从同步主:正在被客户端访问的数据库服务器,被称作主库服务器.从:自动同步主库上的数据的数据库服务器,被称作从库服务器. 二.配置mysql主从同步2.1 拓扑图数据库服务器 192.168.4.51 做主库数据库服务器 192.168.4.52 做从库 2.2 环境准备主从同步未配置之前,要保证从库上要有主库上的数据.禁用selinux ]# setenforce 0 关闭防火墙服务]# systemctl stop firewalld物理连接正常 ]

成功实现Navicat访问Linux中安装的MySQL数据库

成功实现Navicat访问Linux中安装的MySQL数据库 1.安装好MySQL,检查是否正常登录 2.进入mysql数据库配置远程连接 #将所有数据库的所有表(*.*)的所有权限(all privileges),授予通过任何ip(%)访问的root用户,密码为123123,如果要限制只有某台机器可以访问,将其换成相应的IP即可 mysql> grant all privileges on *.* to 'root'@'%' identified by ' '; mysql> flush p

基于LNAMP环境搭建discuz论坛并部署mysql主从

这几天看见个题目:有两台服务器,其中一台部署apache+php+nginx+discuz,另外一台单独跑mysql数据库,其中nginx监听80端口,负责跑静态网页,apache监听88端口,负责跑动态网页(php相关)并且由nginx代理.最后在A设备上安装一个mysql数据库与B设备上的数据库构成mysql主从架构. 实验环境: 1.VMware Workstation 10 2.真机IP:192.168.0.113 2.设备A:nginx+apache+php+discuz+mysql,

JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升. 但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的.这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库.如果使用关系型数据库