🍅程序员小王的博客:程序员小王的博客
🍅 欢迎点赞 👍 收藏 ?留言 📝
🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线
🍅参考文献:mysql官网
一、Mysql主从复制
1、什么是主从复制
? 简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制
2、主从复制解决的问题
(1)高可用
因为数据都是相同的,所以当Master挂掉后,可以指定一台Slave充当Master继续保证服务运行
(2)负载均衡
(3)数据备份
主从就能很好的解决数据备份问题
(4)业务模块化
(5)高扩展
二、在两台机器上安装MySql
1、环境准备(本地还是在线都需要准备)
#?1.卸载mariadb,否则安装mysql会出现冲突
#?2.执行命令rpm?-qa?|grep?mariadb
#?3.列出所有被安装的mariadb?rpm?包;
#?4.执行命令rpm?-e?--nodeps?mariadb-libs-5.5.56-2.el7.x86_64
2、本地安装(5.6版本默认root没有密码)
#?0.上传下载好的软件包到系统中
#?0.执行本地安装包之前必须先安装vim
??yum?install?-y?vim
#?1.安装步骤
??rpm?-ivh?perl-*
??rpm?-ivh?net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
??rpm?-ivh?mysql-community-common-5.6.42-2.el7.x86_64.rpm
??rpm?-ivh?mysql-community-libs-5.6.42-2.el7.x86_64.rpm
??rpm?-ivh?mysql-community-client-5.6.42-2.el7.x86_64.rpm
??rpm?-ivh?mysql-community-server-5.6.42-2.el7.x86_64.rpm
3、在线安装
#?1.添加官方的yum源创建并编辑mysql-community.repo文件
??vi?/etc/yum.repos.d/mysql-community.repo
#?2.粘贴以下内容到源文件中
??[mysql56-community]
????name=MySQL?5.6?Community?Server
????baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
????enabled=1
????gpgcheck=0
????gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
????
????注意:如果需要安装mysql5.7只需要将baseurl修改即可?
??????baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
#?3.安装mysql
??sudo?yum?install?-y?mysql-community-server???
4、设置root用户密码
#?1.启动mysql数据库
??[root@localhost?mysql]#?systemctl?start?mysqld
#?2.修改mysql数据库密码
??mysqladmin?-u?root?-p?password?回车?输入原始密码?在输入新的密码
??
??注意:5.7之前版本安装完成之后没有密码,mysql5.7之后的版本的初始密码是随机生成的,放在了?/var/log/mysqld.log
??????使用命令?grep?‘temporary?password’?/var/log/mysqld.log?读出来即可
??????ROOT!Q2w
#?3.登录mysql
??[root@localhost?mysql]#?mysql?-u?root?-p??
5、开启远程访问
#?1.安装完成mysql时,发现mysql数据库,不允许我们远程连接需要修改设置
#?2.登录mysql,并选择使用mysql数据库
#?3.查看mysql库中的所有表
#?4.查询user表
#?5.执行如下命令
??grant?all?privileges?on?*.*?to?'root'@'%'?identified?by?'root'?with?grant?option;
#?6.刷新权限
??flush?privileges;
#?7.重启服务
??systemctl?restart?mysqld
#?8.测试连接
三、Mysql主从部署
1、架构规划
2、修改mysql的配置文件
注意:MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录
[root@localhost?mysql]#??vim?/etc/my.cnf
3、分别在配置文件中加入如下配置
mysql(master):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
msyql(slave):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
#注意:两个机器的server-id不能一致
[mysqld]
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
[mysqld]
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
4、重启mysql服务器
systemctl?restart?mysqld
5、登录mysql执行如下命令检测配置是否生效
SHOW?VARIABLES?like?'server_id';
6、登录master节点执行如下命令
show?master?status;
7、 登录从节点执行如下命令:
change?master?to?
????master_host='192.168.5.128',
????master_user='root',
????master_password='root',
????master_log_file='mysql-bin.000001',
????master_log_pos=120;
8、开启从节点
start?slave;?
stop??slave;
9、查看从节点状态
(1)查看从节点状态
mysql>???show?slave?status\G??????
?1.出现?Slave_IO_Running:?Connecting?和?Slave_SQL_Running:?Yes?说明成功,
?
?2.如果在搭建过程出现错误,可以查看查看错误日志文件?cat?/var/log/mysqld.log
?(我是因为克隆了虚拟机,所以他们的uuid一样了,
?解决办法参考:https://blog.csdn.net/lxypeter521/article/details/81866115)
(2)出错解决方案(不出错不管)
find?/?-name?auto.cnf
mv?/var/lib/mysql/auto.cnf??/var/lib/mysql/auto.cnf.bk
service?mysql?restart
10、通过客户端工具进行测试
(1)测试内容:master节点建表,从节点查看
SET?NAMES?utf8mb4;
SET?FOREIGN_KEY_CHECKS?=?0;
--?----------------------------
--?Table?structure?for?admin
--?----------------------------
DROP?TABLE?IF?EXISTS?`admin`;
CREATE?TABLE?`admin`??(
??`id`?int(11)?NOT?NULL?AUTO_INCREMENT,
??`username`?varchar(20)?CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_general_ci?NOT?NULL,
??`password`?varchar(20)?CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_general_ci?NOT?NULL,
??PRIMARY?KEY?(`id`)?USING?BTREE
)?ENGINE?=?InnoDB?AUTO_INCREMENT?=?5?CHARACTER?SET?=?utf8mb4?COLLATE?=?utf8mb4_general_ci?ROW_FORMAT?=?DYNAMIC;
SET?FOREIGN_KEY_CHECKS?=?1;
(2)master建的表
(3)从表中自动创建admin表了
11、关闭主从复制(在从节点执行)
stop?slave;
- 注意:如果出现
-
#Slave I/O: Fatal error:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
these UUIDs must be different for replication to work.
#Error_code: 1593错误
请执行如下命令,rm -rf /var/lib/mysql/auto.cnf删除这个文件,
之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,
所以auto.cnf文件中保存的UUID会出现重复.
|