置顶 MySQL数据库读写分离之主从复制
发布于 1 个月前 作者 JavaBird 106 次浏览 来自 分享

欢迎关注微信公众号 老夫撸代码 本期内容:MySQL数据库读写分离之主从复制

MySQL主从复制与读写分离的概念

MySQL数据库是每个进入职场的程序员小白必定会接触到的数据库,也是一般中小型企业的首选数据库。 为什么选择mysql数据库呢? 因为免费、开源、用着还行! 对于一般业务来说,尤其是政府或者企业级的应用来说,由于其业务的限制以及特殊的用户群,从数据量以及使用频率开讲,一个MySql数据库就能够满足日常的需求。 当然也有例外,对于一些大型的网站,每天的用户访问量是成千上万,通常一个应用涉及到数据库的读操作和写操作的比例是2:8的关系,也就是说100个人当中可能会有20个人在你的网站上留下痕迹和剩下的80个人只是在浏览一些相关内容,如果我们把上述比例数据成百上千放大,一个mysql数据库根本是无法满足的,大家通常的操作会通过增加数据库服务器,配置大型的数据库集群来分担压力,也就是通过空间(机器)来换取高效的读写性能。 读写分离和主从复制 读写分离从字面上理解就是写操作和读操作分开,也就是说所有的insert,update,delete等操作都在同一个数据库中操作,而select等查询操作分布在不同的数据库中。 一般会有一个主库(master)和多个从库(slave),从库会通过binlog日志的形式进行复制同步。

mysql-master-salve-proxy.jpg

准备两台服务器

在开始之前我们需要准备两台服务器,这里老夫使用的是vultr的服务器。

老夫平时科学上网查一些资料也是使用的vultr的服务器。

vultr服务器覆盖的地区很广,包括美国、欧洲、澳大利亚、亚洲等国家,我们可以就近选择自己的节点服务器。

QQ20190311-115550.png

vultr的服务器是按时间收费的,最便宜的主机是一个月5美元,大约是33元人民币的样子,如果按小时算大概是5分钱的样子,很划算的。

不像其它的主机商必须的有信用卡,vultr现在已经支持支付宝和微信支付。

官网链接如下:https://www.vultr.com/?ref=7276454

5折优惠链接限时抢购:https://www.vultr.com/?ref=7836153-4F

如果我们不再继续使用服务器可以直接将服务器销毁,这样就不计算时间,唯一不方便的是下次使用还需要在服务器中安装软件。

QQ20190311-115641.png

vultr的服务器的操作系统也很多,常用的都已经提供,大家可以根据自己的熟悉情况,选择使用。

QQ20190311-115621.png

这里老夫选择了日本的服务器,系统是centos7 64位 QQ20190311-115454.png QQ20190311-115715.png

  1. 45.76.103.206 (主:master)
  2. 45.77.134.234 (从: slave)

分别为两台主机安装Mysql数据库 1.下载并安装MySQL官方的 Yum Repository

[root@vultr ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

安装Yum Repository

[root@vultr ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

安装MySQL服务器

[root@vultr ~]# yum -y install mysql-community-server

2.设置MySql数据库 启动数据库

[root@localhost ~]# systemctl start  mysqld.service

查看数据库状态

[root@localhost ~]# systemctl status mysqld.service

获取MySQL的root用户的密码:

[root@localhost ~]# grep "password" /var/log/mysqld.log

QQ20190311-133527.png

进入mysql数据库

[root@localhost ~]# mysql -uroot -p

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库,我们这里设置一个简单的密码,因为mysql对于密码有要求不支持简单的密码格式,这里我们执行如下命令,去掉限制:

mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

修改root密码为root

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

设置远程连城数据库

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
mysql> flush privileges;

上述数据库以及安装并配置完成了,这里我们远程连接测试一下,在测试之前我们需要把防火墙关闭

[root@vultr ~]#systemctl stop firewalld

QQ20190311-134535.png

设置master数据库

这里我们将45.76.103.206作为主数据库。 首先在**/etc/my.cnf**中的[mysqld]添加如下参数:

server-id=1 
log-bin=/var/lib/mysql/mysql-bin 

QQ20190311-135319.png 登录mysql会话,创建用户并且授权

[root@vultr ~]# mysql -uroot -p
...
mysql> create user 'repl' identified by 'repl'; 
mysql> grant replication slave on *.* to repl@45.77.134.234 identified by 'repl'
mysql> quit;

重启mysql数据库

[root@vultr ~]# service mysqld restart

进入mysql数据库中查看master的状态

[root@vultr ~]# mysql -uroot -p
...
mysql> show master status;

此时会显示如下图: 未标题-1.jpg

这时我们的master以及配置成功。

设置slave数据库

这里我们将45.77.134.234作为从库 首先在/etc/my.cnf中的[mysqld]添加如下参数,后保存:

server-id=2 
relay-log-index=slave-relay-bin.index 
relay-log=slave-relay-bin

如下图: QQ20190311-141103.png 重启mysql数据库

[root@vultr ~]# service mysqld restart

至此从库设置完成。

设置同步

进入45.77.134.234(从库)这台主机后,打开mysql会话,执行如下命令

[root@vultr ~]# mysql -uroot -p
...
mysql> change master to master_host='45.76.103.206';
mysql> change master to master_port=3306;
mysql> change master to master_user='repl';
mysql> change master to master_password='repl';
mysql> change master to master_log_file='mysql-bin.000002';
mysql> change master to master_log_pos=154;

设置完成后查看slave的状态: QQ20190311-142039.png 这时,我们通过 navicat 在主库上新建一个数据库test,可以看到从库上面会生成同样一个库。 QQ20190311-142503.png

关注微信公众号:老夫撸代码 老夫带你装逼带你飞

老夫撸代码


回到顶部