赞
踩
前言:
什么是MySQL
在百度百科中的意思是
主从同步是数据库中一个至关重要的一部分。从目的出发,主从同步有那么点备份的意思,主库(Master)将自己库中的写入同时同步给自己的从库(Slave),当主库发生某些不可预知的状况,导致整个服务器无法使用时,由于从库中也有一份数据,所以数据可以做到快速恢复,不造成或者减少造成数据的损失。
当然,这只是第一个层面,如果主从库的作用仅限于此,那么我个人认为没有必要分为两个数据库,只需要定期将数据库内容作为快照发送到另一台服务器,或者每次写入时将写入内容实时发送到另一台服务器不就好了吗,这样不但可以节约资源,也可以起到容灾备份的目的。
当然主从同步的作用绝不可能仅限于此,一旦我们配置了主从结构,我们通常不会让从节点仅仅只作为备份数据库,我们应该还会相应地配置上读写分离(可以使用MyCat等其他,可以自己了解一下(在这里就不过多介绍大家可以在网上自行搜索)在实际环境下,对于数据库的读操作数目远大于对数据库的写操作,所以我们可以让Master只提供写的功能,然后将所有的读操作都移到从库,这就是我们平时常说的读写分离,这样不但可以减轻Master的压力,还可以做容灾备份,一举两得。
说完了主从同步的概念,下面来说说主从同步的原理,其实原理也非常简单,没有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 中:
yum remove mysql
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
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
25. 将MySQL 3306 端口号进行开放
- [root@centos7 bin]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
- //--permanent为永久生效,没有此参数 服务器重启后配置失效
- [root@centos7 bin]# firewall-cmd --reload
26. 最后测试mysql服务是否自启动
- # 重启 linux 系统测试
- shutdown -r now
以上就是安装 mysql 全部教程
这里配置的是一主两从,但是只演示了一主一从,其实只要一主一从配好了多少从都一样配置
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主从同步的账号
- #创建 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;
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
开启同步操作
在MySQL中操作
- # 开启主从同步
- start slave;
查看主从同步状态
show slave status\G;
以上为MySQL的安装和主从同步教程谢谢观看
制作不易请-------记得收藏,点赞+关注哦 !!!!!
下期带来MySQL读写分离教程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。