赞
踩
1、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
2、slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
3、Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
4、Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)
5、master和slave两节点间时间需同步
- [root@localhost ~]# rpm -qa | grep mysql
- #如果有就使用 rm -rf 命令删除
- [root@localhost ~]# whereis mysql
- mysql: /usr/lib64/mysql /usr/share/mysql
- [root@localhost ~]# rm -rf /usr/lib64/mysql /usr/share/mysql #删除
- [root@localhost ~]# find / -name mysql
- /etc/selinux/targeted/active/modules/100/mysql
- [root@localhost ~]# rm -rf /etc/selinux/targeted/active/modules/100/mysql #删除
若用户及用户组已存在,则略过这一步,没有则创建
- [root@localhost ~]# id mysql
- id: mysql: no such user
-
- [root@localhost ~]# groupadd mysql
- [root@localhost ~]# useradd -r -g mysql mysql
- [root@localhost ~]# rpm -qa|grep libaio
- libaio-0.3.109-13.el7.x86_64 #我这里已经安装过了,若没有输出,则需要用yum安装
-
- yum install libaio-devel.x86_64
- #
- yum -y install numactl
https://dev.mysql.com/downloads/mysql/
下载完成后 用rz命令上传到 /soft/目录下
- [root@localhost local]# tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz #解压
- [root@localhost local]# mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql-8.0.27 #重命名
-
- #修改mysql 目录下所有文件的所属用户为root 所属组为root
- [root@localhost local]# chown -R root:root /soft/mysql-8.0.27/
-
- #创建数据存储目录,用以存储数据库数据
- [root@localhost local]# mkdir data
- #修改数据存储目录所属用户及所属组为mysql
- [root@localhost local]# chown mysql:mysql /soft/mysql-8.0.27/data
在初始化之前请先确认/etc/my.cnf 已经不存在,否则在初始化是mysql会默认读取配置文件作为初始化。
若存在该文件,则如下将其改名,留作备份
- [root@localhost mysql]# ll /etc/ | grep my.cnf
- -rw-r--r--. 1 root root 570 Jun 8 2017 my.cnf
- drwxr-xr-x. 2 root root 31 Dec 20 17:32 my.cnf.d
-
- [root@localhost mysql]# mv /etc/my.cnf /etc/my.cnf.bak
- [root@localhost mysql]# ll /etc/ | grep my.cnf
- -rw-r--r--. 1 root root 570 Jun 8 2017 my.cnf.bak
- drwxr-xr-x. 2 root root 31 Dec 20 17:32 my.cnf.d
-
-
- #开始初始化
- [root@localhost mysql]# /soft/mysql-8.0.27/bin/mysqld --initialize --user=mysql --basedir=/soft/mysql-8.0.27 --datadir=/soft/mysql-8.0.27/data
- #注意复制初始化密码 kw1n<XkP:qdh
#进入MySQL安装目录support-files文件中,创建mysql-default.cnf 文件并添加权限 [root@localhost mysql]# cd /soft/mysql-8.0.27/support-files/ [root@localhost support-files]# touch mysql-default.cnf [root@localhost support-files]# chmod 777 mysql-default.cnf #将其复制到/etc/下,改名为my.cnf [root@localhost support-files]# cp -a mysql-default.cnf /etc/my.cnf vi /etc/my.cnf #在my.cnf中添加配置 [mysqld] basedir = /soft/mysql-8.0.27 datadir = /soft/mysql-8.0.27/data socket = /tmp/mysql.sock log-error = /soft/mysql-8.0.27/data/error.log pid-file = /soft/mysql-8.0.27/data/mysql.pid port = 3306 max_allowed_packet=32M #修改配置文件权限,这一句不在My.cnf中,在外面执行 chmod 644 /etc/my.cnf
#复制mysql服务文件到/etc/init.d/目录下,重命名为mysql [root@localhost support-files]# cp -a /soft/mysql-8.0.27/support-files/mysql.server /etc/init.d/mysql #添加可执行权限 [root@localhost support-files]# chmod +x /etc/init.d/mysql #注册服务 chkconfig --add mysql #注册 chkconfig --list mysql #检测 #/etc/ld.so.conf要配置路径,不然报错 [root@localhost support-files]# vim /etc/ld.so.conf #在ld.so.conf中添加 mysql 的lib文件 /soft/mysql-8.0.27/lib #配置环境变量 [root@localhost support-files]# vim /etc/profile #末尾添加: export PATH=$PATH:/soft/mysql-8.0.27/bin:/soft/mysql-8.0.27/lib #重新加载使环境变量生效 [root@localhost support-files]# source /etc/profile #启动服务 [root@localhost support-files]# service mysql start
- #使用初始化密码登录
- [root@localhost support-files]# mysql -uroot -p
如果忘记初始密码:
https://zhuanlan.zhihu.com/p/458845050
- #修改密码
- alter user 'root'@'localhost' identified by 'l***2417';
- mysql> use mysql;
- mysql> update user set host = '%' where user = 'root';
- mysql> flush privileges;
- mysql> GRANT ALL ON *.* TO 'root'@'%';
- mysql> flush privileges;
- #防火墙设置
- #暂时关闭防火墙
- systemctl stop firewalld
- #开放指定端口号
- firewall-cmd --zone=public --add-port=8080/tcp --permanent
- #移除已开放的端口号
- firewall-cmd --zone=public --remove-port=8080/tcp --permanent
- #使防火墙设置生效
- firewall-cmd --reload
我们需要一个主节点,即主数据库mysql(为次数据库提供更新日志)
- #主节点配置
- #在 /etc/my.cnf中新增以下代码
- #开启二进制日志
- log_bin=master_bin
- #设置当前节点全局唯一ID
- server-id=176
- #重启mysql服务
- service mysql start
- #查看从二进制日志的文件和位置开始进行复制(主数据库)
- mysql> show master status;
-
- # 查询结果,这个file和position等会需要用
- mysql> show master status;
- +-------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +-------------------+----------+--------------+------------------+-------------------+
- | master_bin.000010 | 2397 | | | |
- +-------------------+----------+--------------+------------------+-------------------+
-
-
- 创建有复制权限的用户账号
- create user repluser@'10.70.20.%' identified by 'l***2417';
- mysql> grant replication slave on *.* to repluser@'10.70.20.%';
- #从节点配置
- #为当前节点设置一个全局惟的ID号
- server_id=177
- #开启二进制日志
- log-bin=slave_log
- #设置从数据库只读(对root用户无效)
- read_only=ON
- #relay log的文件路径
- relay_log=relay-log
- #默认值hostname-relay-bin.index
- relay_log_index=relay-log.index
- # master_host是主数据库的IP地址,master_user是前面创建的角色名,master_password主数据库密码,master_log_file就是上面主数据库查到的file,MASTER_LOG_POS就是上面的position,get_master_public_key是在主数据库配置文件里面设置的id
- mysql> change master to master_host='10.70.20.176',master_user='repluser',master_password='l***2417',master_log_file='master_bin.000010',MASTER_LOG_POS=2397,get_master_public_key=176;
-
- mysql> START SLAVE;
- mysql> SHOW SLAVE STATUS\G;
此时红框框柱的两项都是yes说明已经完成!如果不是建议先停止同步 stop slave,然后检查change master to...... 这一句是否正确。
主数据库新建一个数据库,此时从数据库也会出现相同的数据库,说明主从同步已实现
当前,左右两边数据库都只有这四个:
在主数据库中新建一个数据库db_test:
从数据库查询:
完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。