Mysql主从服务器原理与服务搭建,超详细可跟做,小白也能学

您所在的位置:网站首页 韩国书法家 Mysql主从服务器原理与服务搭建,超详细可跟做,小白也能学

Mysql主从服务器原理与服务搭建,超详细可跟做,小白也能学

2023-11-06 08:22| 来源: 网络整理| 查看: 265

将数据库进行到底 原理为什么要有主从服务器主从知识扩展 Mysql主从服务搭建(1)建立时间同步环境(2)编译安装MySQL数据库(3)登录Master主服务器配置 20.0.0.21(4)登录salve 从服务器配置(5)验证

原理 为什么要有主从服务器

在企业网站中,后端MySQL数据库只有一台时,会有以下问题:

单点故障,服务不可用无法处理大量的并发数据请求数据丢失—大灾难

在这里插入图片描述 改造办法:

增加MySQL数据库服务器,对数据进行备份,形成主备确保主备MySQL数据库服务器数据是一样的主服务器宕机了,备份服务器继续工作,数据有保障

MySQL主从复制与读写分离是密切相关的 在这里插入图片描述 当然还有更高级的解决方案,读写分离,今天我们只讲主从复制

主从知识扩展

MySQL主从复制的类型:

基于语句的复制(默认)在主服务器上执行的语句,从服务器执行同样的语句,基于行的复制把改变的内容复制到从服务器混合类型的复制—旦发现基于语句无法精确复制时,就会采用基于行的复制

###主从复制的工作过程 在这里插入图片描述 复制的过程: ·在每个事物更新数据完成之前, Master在二进制日志记录这些改变。写入二进制日志完成后, Master通知存储引擎提交事物。

·Slave将Master的Binary log复制到中继日志,首先Slave开始一个工作线程–l/o线程, l/o线程在Master上开一个普通的连接,然后开始Binlog dump process,Binlog dump process从Master的二进制日志中读取事件,如果已经更上Master,它会睡眠并等待Master产生的新事件。l/o线程将这些日志写入中继日志

·SQL Slave thread (SQL从线程)处理该过程的最后一步, SQL线程从中继日志读取事件,并重放其的事件而更新Slave数据,使其与Master中的数据一致。只要该线程与1/0线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

Mysql主从服务搭建

环境介绍: 20.0.0.21 主服务器 20.0.0.25 从服务器 20.0.0.26 从服务器

###master, slave1, slave2#### 关闭防火墙、关闭核心防护

(1)建立时间同步环境 1、在主机 Master 搭建时间同步服务器NTP (20.0.0.21) [root@localhost ~]# yum-y install ntp [root@localhost ~]# vi /etc/ntp.conf ####最后面添加这二行 server 127.127.1.0 fudge 127.127.1.0 stratum 8 [root@localhost ~]# service ntpd restart [root@localhost ~]# systemctl restart ntpd [root@localhost ~# systemctl enable ntpd 2、在从服务器上配置NTP同步 登录到从1服务器 20.0.0.25 [root@localhost ~]# yum-y install ntpdate [root@localhost ~]# ntpdate 20.0.0.21 [root@localhost ~]# crontab -e */2 * * * * /usr/sbin/ntpdate 20.0.0.21 >>/var/log/ntpdate.log [root@localhost ~]# systemctl restart crond [root@localhost ~]# systemctl enable crond [root@localhost ~]# tail -f /var/log/ntpdate.log ###动态查看更新日志文件 登录到从2服务器 20.0.0.26 [root@localhost ~]# yum-y install ntpdate [root@localhost ~]# ntpdate 20.0.0.21 [root@localhost ~]# crontab -e */2 * * * * /usr/sbin/ntpdate 20.0.0.21 >>/var/log/ntpdate.log [root@localhost ~]# systemctl restart crond [root@localhost ~]# systemctl enable crond [root@localhost ~]# tail -f /var/log/ntpdate.log ###动态查看更新日志文件 (2)编译安装MySQL数据库 ##三台都是此操作,可同步进行 #使用CRT登录3台主机, 登录以后检查, 登录是否正常, 确认下主机的IP地址是否正确, 各个主机通信是否正常。 登录 20.0.0.21 此终端, 在终端页面最下面, 右击打开 ---send conmands to all sessions ###此功能是敲一条命令, 其他终端全部同步执行 1、安装Mysq环境依赖包 [root@localhost ~]# yum -y install \ ncurses \ ncurses-devel \ bison \ cmake \ gcc \ gcc-c++ 2、创建运行用户 [root@localhost ~]# useradd -s /sbin/nologin mysql 3、编译安装 ###上传mysql-boost-5.7.20.tar.gz到opt目录下### [root@localhost ~]cd /opt [root@localhost opt]# tar xzvf mysql-boost-5.7.20.tar.gz [root@localhost opt]#cd /opt/mysql-5.7.20/ [root@localhost mysql-5.7.20]# cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=boost \ -DWITH_SYSTEMD=1 ######编译安装#### make && make install #####数据库目录进行权限调整###为了让你安装时不报错,踩坑集!!########### chown -R mysql:mysql /usr/local/mysql/ #####建立调整配置文件######## vi /etc/my.cnf [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES chown mysql:mysql /etc/my.cnf #######设置环境变量#### ###为了让系统能够直接识别 mysql/bin下的命令 和mysql/lib 下的各种库 echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/bin:$PATH' >> /etc/profile echo 'export PATH' >> /etc/profile source /etc/profile cd /usr/local/mysql/ ###########初始化########## bin/mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data ###为什么cp usr/而不是cp /usr/ ?因为现在是在这个目录底下 ###为什么要cp?为了让systemctl进行管理,systemctl管理/usr/lib/systemd/system/下的程序 cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl enable mysqld systemctl start mysqld systemctl status mysqld netstat -anpt | grep 3306 ###刚开始没密码是空的直接回车,然后输入密码 mysqladmin -u root -p password mysql -u root -p 输入刚刚的密码 (3)登录Master主服务器配置 20.0.0.21 ###在原来server-id = 1的地方修改成11后面新增下面两行 [root@localhost mysq]# vi /etc/my.cnf server-id = 11 log_bin = master-bin log-slave-updates = true [root@localhost mysq]# systemct restart mysqld ###重启数据库 #登录Master数据库给从服务器授权 [root@localhost mysql# mysql -uroot -p #下面的账号和密码是给从服务器使用的 mysql>grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by 'abc123'; mysąl> flush privileges; #下面这条命令下的东西尤其重要,FILE和POS都是一会从服务器要使用的 mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 599 | | | | +-------------------+----------+--------------+------------------+-------------------+ (4)登录salve 从服务器配置 [root@localhost mysql]# vi /etc/my.cnf ##在原来server-id = 1的地方修改成22后面新增 server-id = 22 relay-log = relay-log-bin relay-log-index = slave-relay-bin.index [root@localhost mysq]# systemctl restart mysqld ##重启数据库 #登录Slave数据库配置同步 ###注意下这边的master_log_file='master-bin.000001', master_log _pos=599; 要和Master数据库信息一致, 不一致的话要更改先stop slave; #然后更改同步信息 [root@localhost mysql]#mysql -uroot -p ##账号和密码是主服务器设置的,同步的日志文件和pos也是刚刚主服务器的 mysql>change master to master_host='20.0.0.21',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=599; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G ********************* 1. row********************************* Slave_lO_State: Waiting for master to send event Master_Host: 192.168.32.11 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 604 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 321 Relay_Master_Log_File: master-bin.000001 Slave_lO_Running: Yes ####开启 Slave SQL Running: Yes ####开启 ##看到上面两条的时候说明成功了,如果出现其他,请检查配置文件 #####登录salve2从服务器配置20.0.0.26 ####配置和上面从1服务器一样 [root@localhost mysq]# vi /etc/my.cnf ##在原来server-id =1的地方修改成22 后面新增 server-id = 33 relay-log = relay-log-bin relay-log-index = slave-relay-bin.index [root@localhost mysq]# systemctl restart mysqld ###重启数据库 #登录Slave 数据库配置同步 ###注意下这边的master_log_file= 'master-bin.000001', master_log_pos= 599; 要和Master 数据库信息一致, 不一致的话要更改先stop slave; #然后更改同步信息 [root@localhost mysqj]j# mysql -uroot -p mysql> change master tomaster_host='20.0.0.21',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=599; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G ***************1. row************************** Slave_lO_State: Waiting for master to send event Master_Host: 192.168.32.11 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 604 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 321 Relay_Master_Log_File: master-bin.000001 Slave_lO_Running: Yes ####开启 Slave SQL Running: Yes ####开启 (5)验证 主服务器操作: mysql> create database qhdx; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qhdx | | sys | +--------------------+ 5 rows in set (0.00 sec) ###从服务器1查看 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qhdx | | qq | | sys | +--------------------+ 5 rows in set (0.00 sec) ###从服务器2查看 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qhdx | | sys | +--------------------+ 5 rows in set (0.00 sec)

下一篇准备写一下,读写分离哦



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3