主从库理论知识-主从同步如何实现?
  ⼤型⽹站为了减轻服务器处理海量的并发访问,所产⽣的性能问题,采⽤了很多解决⽅案,其中最主流的解决⽅案就是读写分离,即将读操作和写操作分别导流到不同的服务器集执⾏,到了数据业务层,数据访问层,如果还是传统的单靠⼀台服务器去扛,⾯对如此多的数据库连接操作,必然会崩溃,如果造成数据的丢失,是不堪设想的。本⽂将利⽤mysql的主从配置,实现读写分离。
主从库理论知识
主从同步如何实现?
  同步⼯作主要⼜三步,第⼀步就是主服务器(master)将对数据的操作记录到⼆进制⽇志⽂件(Binary log)中,也就是说,在每个事务更新数据完成之前,mster在⽇志⾥记录这些改变,mysql将事务串⾏地写⼊⼆进制⽂件中,在事件写⼊⼆进制⽇志完成后,master通知存储引擎提交事务,提交好事务后,就会进⼊第⼆步,需要补充⼀点的是,我们对数据的⼀次操作就称为⼀次⼆进制⽇志事件,也就是Binary log event。在第⼆步呢,Slave将master的Binary log拷贝到它的中继⽇志(Relay log)中,也就是Slave会⾸先开启⼀个⼯作线程(I/O thread),I/O线程在master上打开⼀个普通的连接,做Binary log的拷贝,从master的⼆进制⽇志⽂件中读取事件,如果已经跟上了master,就会睡眠并等待master产⽣新的事件,I/O线程然后将这些事件写⼊中继⽇志中;第三步就是Slave重做中继⽇志事件,SQL 线程从中
继⽇志中读取事件,并重放其中的事件,更新Slave中的数据,使其与Master中的数据⼀致。
主从库配置
  我在⾃⼰VMware虚拟机上装了两个centOs系统,使⽤命令:# cat /etc/redhat-release 可以看到我⾃⼰的CentOs版本为
7.6.1810的
CentOS7.6安装mysql5.7.31
1. 解压到/usr/local⽬录
# tar -zxvf mysql-5.7. -C /usr/local
2. mysql-5.7.31-www.lanboyulezc  linux-glibc2.5-i686⽂件夹重命名为mysql
# cd /usr/local
# mv mysql-5.7.18-linux-glibc2.5-i686/ mysql
3. 新建mysql⽤户组和mysql⽤户
# groupadd mysql
# useradd -r www.shentuylgw -g mysql mysql
4. 新建数据⽬录
# cd /usr/local/mysql
# mkdir data
5. 更改所有者以及授权755
# cd /usr/local
# chown -R mysql:mysql mysql/
# chmod -R 755 mysql/
6. 初始化mysqld
# cd /usr/local/mysql
# ./bin/mysqld --user=mysql -www.gaodeyulept-basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
如果执⾏初始化时出现报错:./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory,就是少东西,centos使⽤yum装yum -y install numactl,装了后在执⾏初始化命令就可以了。
如果出现错误:initialize specified but the data directory has files in it. Aborting.⼤意是提⽰data⽬录有⽂件,把mysql安装⽬录
\data⽂件夹⾥的内容清空(建议读者备份到其他地⽅)。再次执⾏"mysqld --initialize",没有报错了!
记录下root的初始密码: Wg;iqpl_P5os
7. 将mysqld添加成服务,并启动它
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 建⽴mysql默认的配置⽂件/etc/myf,并添加图⽚中内容
mysql下载后的初次使用
# vim /etc/myf
按esc,输⼊ :wq,保存并退出myf,启动mysqld
# service mysqld start
查看mysql是否启动成功
# ps -ef|grep mysql
出现如下信息表⽰启动成功
当然也可以查看mysqld的状态
# service mysqld status
8. 登录mysql并修改root密码
# cd /usr/local/mysql
# ./bin/mysql www.jintianxuesha-uroot –p
输⼊初始密码,步骤6中有⽣成,出现如下信息表⽰登录成功
修改root密码
mysql> SET PASSWORD = PASSWORD('123456');
mysql> FLUSH PRIVILEGES;
初次登录没有修改root的密码,操作数据库会出现如下错误提⽰,那么需要修改root⽤户的密码
ERROR 1820 (HY000):www.javachenglei You must reset your password using ALTER USER statement before executing this statement.
9. 设置mysql远程可访问(前提是防⽕墙必须关闭,chkconfig iptables off:设置⾃动启动为关闭,service iptables stop:关闭防⽕墙)先登录到mysql
mysql> use mysql
mysql> update user set host = '192.168.0.148' where user = 'root';
mysql> FLUSH PRIVILEGES;
192.168.0.148即是可远程访问本地mysql的远程ip,若想任意ip都能访问本地mysql,那么只需要将192.168.0.148换成%即可mysql> update user set host = '%' where user = 'root';
MySQL主从库配置
  本⽂将ip为192.168.0.188的主机作为master,ip为192.168.0.152的主机作为slave,我⽤的mysql版本为:5.7.31。当然我们也可以在本机下载两套mysql软件,设置不同端⼝后进⾏启动,也是可以配置出主从同步来。
1. master上配置bin-log⽇志
修改mysql的配置⽂件:www.chuancenpt# vim /etc/myf,加上如下内容,修改配置后需要重启mysql服务器
log-bin= master-bin  #[必须]启⽤⼆进制⽇志
log-bin-index=master-bin.index
server-id        = 4          #[必须]服务器唯⼀ID,默认是1,最好取ip的后3位
expire-logs-days  = 7          #只保留7天的⼆进制⽇志,以防磁盘被⽇志占满
测试log_bin是否成功开启
mysql> show variables uy2zhuce'%log_bin%';
出现下图,log_bin为ON则表⽰开启成功,OFF表⽰开启失败
配置好后,查看主服务器状态:show master status
2. slave上配置relay-log
配置从服务器:vim www.jujinyule /etc/myf,点击 i 进⼊编辑模式,添加如下配置:
relay-log-index=slave-relay- www.xingyunylpt bin.index
ao3zc bin
server-id=152 #只要和master的server-id不⼀样就可以了
3. 将master和slave联系起来,slave需要知道master的地址
master的数据库中建⽴备份账号
repl为⽤户名,192.168.0.152代表从数据库的主机地址,如下表⽰远程地址为密码为123的,⽤户名是repl就可以连接到master主机,并为其授予 replication slave 权限。123为master的连接密码。
mysql> create user repl; # 创建⽤户名为repl的⽤户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.152' IDENTIFIED BY '123';
mysql> FLUSH PRIVILEGES;
mysql> use mysql;
mysql> select user,authentication_string,host from user;
可看到我们刚创建的备份账号:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。