MySQL的配置文件:/etc/my.cnf
查看MySQL的数据目录:show variables like '%datadir%';
记录mysql服务的启动、服务异常,用于解决服务器故障;
查看日志:show variables like '%log_error%';
默认开启,记录更改数据的语句,用于数据同步和灾难时人工恢复数据;
查看日志:show variables like '%log_bin%';
查看二进制日志格式:show variables like '%binlog_format%';
查看二进制日志过期时间:show variables like '%binlog_expire_logs_seconds%';
默认关闭,记录客户端连接发送给数据库的操作指令
查看日志:show variables like '%general%';
记录执行时间超过long_query_time(默认10s)查询
默认不记录不使用索引进行查找的查询。
可用log_slow_admin_statements 和 更改此行为 log_queries_not_using_indexes。
#记录执行较慢的管理语句
log_slow_admin_statements =1
#记录执行较慢的未使用索引的语句
log_queries_not_using_indexes = 1
查看日志:show variables like 'slow_query_log';
从库上日志,从库读取主库的二进制日志后写入中继日志,通过中继日志执行Sql。
查看日志:show variables like '%relay%';
重做日志(redo log)
在数据变更前先写入redo log。
撤销日志(undo log)
当一些变更执行到一半无法完成时,可根据撤销日志恢复到变更前。
主库内部有一个线程负责与从库的长连接。
1.主库bin log二进制文件纪录所有增删改SQL语句(binlog线程)。
2.从库把主数据库的bin log文件的SQL 复制到自己的中继日志 relay log(io线程)。
3.从库的relay log重做日志文件,再执行一次这些sql语句(Sql执行线程)。
1.全同步复制
主库执行完一个事务之后,要所有从库也都执行完该事务,才返回处理结果给客户端,性能较低。
2.异步复制
主库提交事物后,发送binlog日志给从库,从库收到日志后不等从库同步完成事务,主库就将结果返回给客户端。性能高,数据一致性最差。
3.半同步复制
主库提交事物后等待至少有一个从库收到了Binlog,并写入到中继日志,再返回给客户端,提高了数据的一致性。
参数:rpl_semi_sync_master_wait_for_slave_count,可对需要响应的从库数量进行设置,默认为1。
4.增强半同步复制
mysql 5.7.2后的版本对半同步复制的改进,原理一样,主要解决幻读问题。
主库配置了参数 rpl_semi_sync_master_wait_point = AFTER_SYNC 后,
主库在存储引擎提交事务前,须先收到从库数据同步完成的确认信息后,才提交事务,来解决幻读问题。
语句级别的复制(statement-based replication,SBR):binlog记录SQL原文,主库和从库选的索引不一致,会导致数据不一致。
行级别的复制(row-based replication,RBR):binlog日志记录SQL,还记录删除的主键ID信息、删除的行数,会很占空间。
混合复制(mixed-based replication,MBR):row和statement格式混合使用,当数据可能不一致时,用row格式,否则用statement格式。
主机名 | ip | 角色 |
---|---|---|
c7-lab1 | 10.10.104.51 | 主 |
c7-lab2 | 10.10.104.52 | 从 |
官网下载rpm bundle包上传到centos系统上。
官网:https://dev.mysql.com/downloads/mysql
# 服务器上直接下载:
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
tar xvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-*
MySQL的rpm包
rpm -ivh mysql-community-common-8.0.33-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm mysql-community-libs-8.0.33-1.el7.x86_64.rpm mysql-community-client-8.0.33-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm mysql-community-server-8.0.33-1.el7.x86_64.rpm
#初始化
mysqld --initialize --console
#授权mysql用户
chown -R mysql:mysql /var/lib/mysql/
启动服务
systemctl start mysqld
systemctl enable mysqld
#查看初始化密码
cat /var/log/mysqld.log | grep localhost
mysql -u root -p #带上初始化的密码
#修改密码,开启远程
#修改登录密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Csdn@123';
#切换到mysql数据库
use mysql;.
#开启数据库远程管理
update user set Host='%' where User='root';
flush privileges;
cat >> /etc/my.cnf <
#登录MySQL
mysql -uroot -pCsdn@123
use mysql;
#创建用户
CREATE USER 'db_sync'@'%' IDENTIFIED BY 'Csdn@123';
#授权账号复制权限
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%';
#刷新配置
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记下输出中的 File 和 Position 值,后续在从服务器上使用。
cat >>/etc/my.cnf <
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST = '10.10.104.51',
MASTER_USER = 'db_sync',
MASTER_PASSWORD = 'Csdn@123',
#主服务器数据库上的file值(不能有空格)
MASTER_LOG_FILE = 'mysql-bin.000001',
#主服务器数据库的Position值
MASTER_LOG_POS = 157,
get_master_public_key=1;
#开启同步
start slave;
#查看同步状态
SHOW SLAVE STATUS\G;
Slave_IO_Running 、Slave_SQL_Running 两个字段的值都是 Yes,表示主从复制已经成功配置。