一、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、架构规划
- 两个linux上都安装了mysql 5.6.51版本
- 192.168.5.128 master 主节点
- 192.168.5.129 slave 从节点
2、修改mysql的配置文件
注意:MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录
- 数据库目录 :
/var/lib/mysql/
- 配置文件 :
/usr/share/mysql(mysql.server命令及my.cnf配置文件)
[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=1 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、开启从节点
1. start slave; 2. 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)出错解决方案(不出错不管)
- 解决办法参考:
https://blog.csdn.net/lxypeter521/article/details/81866115
- 查看auto.cnf 位置
find / -name auto.cnf
- 备份一份
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bk
- 重新启动mysql
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会出现重复.