MySQL安装
MYSLQ 配置文件的常规写法:
[mysqld]
validate_password_policy=0
validate_password_length=6 //密码规则
server_id=28
log-bin=server28 //开启binlog日志
binlog_format=row //说明binlog日志的日志格式
statement:记录每一条修改数据的SQL命令
row:不记录SQL语句,仅仅保存哪条记录被修改
mixed:混合使用
log_slave_updates //常常用于链式主----》从-----》从
lower_case_table_names=1 //不区分大小写
max_connections=1000 //最大连接数
Step:1 卸载自带的mariadb数据库
yum remove -y mariadb*
Step:2 上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar到/opt下并且解压
cd /opt
rz --->选择上传的包
tar -xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
Step:3 安装RPM包
rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm
yum -y install net-tools
Step:4 初始化数据库
mysqld –initialize
chown -R mysql:mysql /var/lib/mysql //第一次启动数据库的时候自己可以初始化。所以可以不用写入
service mysqld start
Step:5 登录并修改默认密码
grep password /var/log/mysqld.log # 查看默认密码
mysql -uroot -p'默认密码' # 用默认密码登录
set password = password("123456"); # 修改新密码
grant all privileges on *.* to root@'%' identified by '123456' with grant option; # 开启远程访问
flush privileges; # 刷新授权
若密码修改不成功,则在配置文件/etc/my.cnf中加入
validate_password_policy=0
validate_password_length=6
service mysqld restart //重启mysqld
Step:6 防火墙放开3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload //重启防火墙规则
systemctl restart firewalld //重启防火墙服务
MySQL基于GTID实现互为主从
1、修改A服务器上的mysql配置文件my.cnf
在my.cnf文件里加入参数(注意不要重复定义参数)
server-id=28 //这里的ID号与从库上或者主库上的ID必须保证不一样
log-bin=mysql-bin
binlog_format=row //主从复制模式
log-slave-updates=true //slave 更新是否记入日志
gtid-mode=on // 启用gtid类型,否则就是普通的复制架构
enforce-gtid-consistency=true //强制GTID 的一致性
master-info-repository=TABLE //主服信息记录库=表 /文件
relay-log-info-repository=TABLE //中继日志信息记录库
sync-master-info=1 //同步主库信息
slave-parallel-workers=4 //从服务器的SQL 线程数,要复制库数目相同
binlog-checksum=CRC32 // 校验码 ,可以自定义
master-verify-checksum=1 //主服校验
slave-sql-verify-checksum=1 //从服校验
binlog-rows-query-log_events=1 //二进制日志详细记录事件
report-port=3306 //提供复制报告端口,当前实例端口号
report-host=192.168.1.28 //提供复制报告主机,本机的ip地址
lower_case_table_names=1 //忽略大小写
max_connections=1000 //最大连接数
2、修改B服务器上的mysql配置文件my.cnf
在my.cnf文件里加入参数(注意不要重复定义参数)
server-id=29 //这里的ID号与从库上或者主库上的ID必须保证不一样
log-bin=mysql-bin
binlog_format=row //主从复制模式
log-slave-updates=true //slave 更新是否记入日志
gtid-mode=on // 启用gtid类型,否则就是普通的复制架构
enforce-gtid-consistency=true //强制GTID 的一致性
master-info-repository=TABLE //主服信息记录库=表 /文件
relay-log-info-repository=TABLE //中继日志信息记录库
sync-master-info=1 //同步主库信息
slave-parallel-workers=4 //从服务器的SQL 线程数,要复制库数目相同
binlog-checksum=CRC32 // 校验码 ,可以自定义
master-verify-checksum=1 //主服校验
slave-sql-verify-checksum=1 //从服校验
binlog-rows-query-log_events=1 //二进制日志详细记录事件
report-port=3306 //提供复制报告端口,当前实例端口号
report-host=192.168.1.29 //提供复制报告主机,本机的ip地址
lower_case_table_names=1 //忽略大小写
max_connections=1000 //最大连接数
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=performance_schema.%
(可以在配置文件里加入,作用屏蔽要复制的库,也可以不用写入)
3、授权数据同步用户
A服务器mysql实例3306:
grant replication slave,replication client on *.* to slave@'192.168.1.215' identified by '123456';
B服务器mysql实例3306:
grant replication slave,replication client on *.* to slave@'192.168.1.214' identified by '123456';
================================================================================
A服务器mysql实例3306:
change master to master_host='192.168.1.215',master_port=3306,master_user='slave',master_password='123456',master_auto_position=1;
B服务器mysql实例3306:
change master to master_host='192.168.1.214',master_port=3306,master_user='slave',master_password='123456',master_auto_position=1;
==================================================================================
A、B服务器上开启主从复制:start slave;
stop slave;
4、查看状态
A服务器:show slave statusGshow processlist;
IO线程:IO线程从主库的binlog日志里面复制SQL语句到本机的中继日志relay-log中
SQL线程:SQL线程把中继日志中的SQL执行一遍
从从库变成独立库:
1>cd /var/lib/mysql
2>rm -rf master.info relay-log.info , 主机名-relay-bin-xxxx,主机名-relay-bin.index
主库的信息会自动保存在master.info中
3>重启mysqld服务
4>show slave statusG; 查看