在linux中安装MySQL以及实现MySQL主从同步 超详细教程

前言:

什么是MySQL

        在百度百科中的意思是

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

什么是MySQL主从同步

主从同步是数据库中一个至关重要的一部分。从目的出发,主从同步有那么点备份的意思,主库(Master)将自己库中的写入同时同步给自己的从库(Slave),当主库发生某些不可预知的状况,导致整个服务器无法使用时,由于从库中也有一份数据,所以数据可以做到快速恢复,不造成或者减少造成数据的损失。

当然,这只是第一个层面,如果主从库的作用仅限于此,那么我个人认为没有必要分为两个数据库,只需要定期将数据库内容作为快照发送到另一台服务器,或者每次写入时将写入内容实时发送到另一台服务器不就好了吗,这样不但可以节约资源,也可以起到容灾备份的目的。

当然主从同步的作用绝不可能仅限于此,一旦我们配置了主从结构,我们通常不会让从节点仅仅只作为备份数据库,我们应该还会相应地配置上读写分离(可以使用MyCat等其他,可以自己了解一下(在这里就不过多介绍大家可以在网上自行搜索)在实际环境下,对于数据库的读操作数目远大于对数据库的写操作,所以我们可以让Master只提供写的功能,然后将所有的读操作都移到从库,这就是我们平时常说的读写分离,这样不但可以减轻Master的压力,还可以做容灾备份,一举两得。

MySQL主从同步的原理

说完了主从同步的概念,下面来说说主从同步的原理,其实原理也非常简单,没有Redis集群那么多的概念。

实际上当我们在MySQL中配置了主从之后,只要我们对Master节点进行了写操作,这个操作将会被保存到MySQL的binary-log(bin-log)日志当中,当slave连接到master的时候,master机器会为slave开启binlog dump线程。当master 的 binlog发生变化的时候,Master的dump线程会通知slave,并将相应的binlog内容发送给Slave。而Slave节点在主从同步开启的时候,会创建两个线程,一个I/O线程,一个SQL线程,这在我们后面的搭建中可以亲眼看到。

        1. I/0线程:该线程链接到master机器,master机器的binlog发送到slave的时候,IO线程会将该日志内容写在本地的中继日志(Relay log)中。

        2. SQL线程:该线程读取中继日志中的内容,并且根据中继日志中的内容对Slave数据库做相应的操作。

        3. 可能造成的问题:在写请求相当多的情况下,可能会造成Slave数据和Master数据不一致的情况,这是因为日志传输过程中的短暂延迟、或者写命令较多,系统速度不匹配造成的。

这大致就是MySQL主从同步的原理,真正在其中起到作用的实际上就是这两个日志文件,binlog和中继日志。

        废话不多说开始操作.....

第一步从MySQL官网下载MySQL(这里就不为大家演示了)

        由于我下载的是MySQL 8.0.20的版本,所以就以8.0.20来进行演示。

 下载完后我们在 linux 中通过 ip addr 获取到 IP 然后通过远程连接工具进行连接,然后将下载完的 MySQL 安装包上传到 linux 中:

  1. 检查是否安装过mysql
  2. yum remove mysql
  3. 查看是否有mysql依赖 如果有则卸载
  4. rpm -qa | grep mysql

      5. 检查是否有mariadb  | 如果有则卸载

rpm -qa | grep mariadb

// 卸载命令

rpm -e --nodeps mariadb-libs

 6.安装mysql依赖包

yum install libaio

7. 由于我是将MySQL的安装压缩包上传到了 /usr/java/workfile 文件夹下 (其中的/java/workfile/可以用 mkdir命令 来创建这两个文件夹)然后上传到 workfile 文件中后进行解压这个压缩文件用 tar -xvf XXX (注意这里不能使用 -zxvf 命令)解压完后用 mv 进行重新命名 为 mysql 再用 mv 移动到 /usr/local 目录中 最后进入该目录找到刚刚移动过来的MySQL文件夹 并进入 在里面建一个 mysqldb 的文件夹备用 ) 

8. 给 MySQL 文件目录赋予权限

chmod -R 777 /usr/local/mysql/

9. 创建mysql组和用户

[root@centos7 mysql]# groupadd mysql

 

10. 创建用户(-s /bin/false参数指定mysql用户仅拥有所有权,而没有登录权限)

useradd -r -g mysql -s /bin/false mysql

11. 将用户添加到组中

[root@centos7 mysql]# chown -R mysql:mysql ./

12. 修改mysql配置文件 将里面的命令都删除掉,然后添加以下命令,保存并退出(如果有一定经验,可以在里面添加一些其他的配置) 按 i 键进行编辑,编辑完后在按 esc 键,再按 shift+: 后输入 wq 保存并退出编辑

[root@centos7 mysql]# vi /etc/my.cnf

         将一下代码粘贴到 my.conf 文件中

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysqldb
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
#binlog每个日志文件大小
max-binlog-size = 500M
#设置binlog清理时间
expire_logs_days = 7
#指定MySQL错误日志的位置和名称
log_error=/var/log/mysql/error.log
#指定常规查询日志的位置和名称
general_log_file=/var/log/mysql/mysql.log
#启用常规查询日志记录
general_log=1

13. 完成以上步骤后开始安装进入 mysql/bin 文件夹中安装 MySQL  

./mysqld --initialize --console

        注意: 安装mysql后,一定要记住初始化随机密码

 

14. 然后 cd /usr/local/mysql/support-files 文件夹下 给mysql安装目录赋予一下权限后,再次启动

chmod -R 777 /usr/local/mysql

// 启动mysql

./mysql.server start

15. 将mysql添加到系统进程中

[root@centos7 bin]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

16. 设置mysql自启动

[root@centos7 bin]# chmod +x /etc/init.d/mysqld
[root@centos7 bin]# systemctl enable mysqld

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第1张图片

17. 修改root用户登录密码 | 登录mysql

[root@centos7 bin]# cd /usr/local/mysql/bin/
[root@centos7 bin]# ./mysql -u root -p

19. 然后利用 13步 刚开始生成的 mysql 默认密码进行登录

20. 登录成功后更改初始化密码

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

21. 设置允许远程登录(远程登录测试可以使用mysql可视化工具进行测试)

mysql> use mysql;
mysql> update user set user.Host='%'where user.User='root';
mysql> flush privileges;
mysql> exit

22. 重启服务且测试

# centos6与centos7的服务命令都支持
[root@centos7 bin]# systemctl restart mysqld   
[root@centos7 bin]# service mysql restart

23. 查看mysql是否启动

[root@centos7 bin]# systemctl status mysql

24. 查看防火墙开放端口

firewall-cmd --list-all

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第2张图片

25. 将MySQL 3306 端口号进行开放

[root@centos7 bin]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
//--permanent为永久生效,没有此参数 服务器重启后配置失效
[root@centos7 bin]# firewall-cmd --reload

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第3张图片

26. 最后测试mysql服务是否自启动

# 重启 linux 系统测试
shutdown -r now

        以上就是安装 mysql 全部教程

接下来开始配置MySQL主从同步

        这里配置的是一主两从,但是只演示了一主一从,其实只要一主一从配好了多少从都一样配置      

1)配置 master 主库

        1. 修改配置文件 cd 到 cd /etc 文件夹中

        2. 然后编辑 vi my.conf 文件

                在里面添加以下代码

# MySQL 服务ID,保证整个集群环境中唯一不可重复
server-id=1
# 是否只读:1 代表只读,0 代表读写
read-only=0
# 忽略数据,指不需要同步的数据库,默认不配置就是同步所有数据库
# binlog-ignore-db=mysql
#指定需要同步的数据库
# binlog-do-db=test

然后进入MySQL的bin文件下重启MySQL

systemctl restart mysqld

配置MySQL主从同步的账号

  • 登录MySQL创建远程链接账号,并赋予主从复制权限
#创建 itcast 用户,并设置密码、该用户可以在任意主机链接MySQL服务    (密码必须是复杂类型不能设置简#单,否则会报错)如果需要指定IP将%换位指定IP地址即可
CREATE USER 'itcast'@'%'IDENTIFIED WITH mysql_native_password BY 'Root@123456';

  
#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

     然后通过指令查看二进制日志坐标

show master status;

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第4张图片

 在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第5张图片

 从库配置

1. 直接修改 my.conf 文件

cd /etc

vi my.conf

然后添加一下内容

# MySQL 服务ID,保证整个集群环境中唯一不可重复
server-id=2
# 是否只读:1 代表只读,0 代表读写
read-only1

然后重启MySQL服务

systemctl restart mysqld

然后重启完后登录MySQL,设置从库连接主库的配置

8.0.23以上的用一下配置
CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库的IP地址',SOURCE_USER='远程链接的用户名',SOURCE_PASSWORD='远程链接用户名的密码',
SOURCE_LOG_POS=XXX;

8.0.23一下的用一下配置
CHANGE MASTER TO MASTER_HOST='192.168.77.143',MASTER_USER='itcast',MASTER_PASSWORD='Root@123456',MASTER_LOG_FILE='binlog.000004',MASTER_LOG_POS=663;

# MASTER_LOG_FILE 后面等于的值为 主库中 file 的 binlog.000004
# MASTER_LOG_POS 后面的值为 Position 的值 663

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第6张图片

开启同步操作

        在MySQL中操作

# 开启主从同步
start slave; 

查看主从同步状态

show slave status\G;

在linux中安装MySQL以及实现MySQL主从同步 超详细教程_第7张图片

 以上为MySQL的安装和主从同步教程谢谢观看

        制作不易请-------记得收藏,点赞+关注哦 !!!!!

        下期带来MySQL读写分离教程

你可能感兴趣的:(mysql,数据库,linux)