MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的 MySQL AB 公司,该公司于 2008 年被昇阳微系统(Sun Microsystems)收购。2009 年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL 成为 Oracle 旗下产品。
MySQL 在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在 Internet 上的中小型网站中。随着 MySQL 的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google 和 Facebook 等网站。非常流行的开源软件组合 LAMP 中的 “M” 指的就是 MySQL。
1、MySQL8.0主从实战
- 由于用户增加单台MySQL压力太大,所以得需要两台
- 主从:两台MySQL
- 主从库my.cnf,mysqld下面设置server-id和log-bin
- 主库上授权从库通过特定账号同步
- 查看主库bin-log日志名称和position
- 从库change master指定主库信息
- 从库执行start slave启动IO和SQL线程
1.2、主库配置
- 在MySQL源码目录里面,
packaging/rpm-common/my.cnf
配置文件
- 复制到/etc/下
vim /etc/my.cnf 编辑此文件,内容如下
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[mysqld]
server-id = 1
log-bin = mysql-bin
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
datadir=/data/mysql/
socket=/tmp/mysql.sock
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
- 路径是我们MySQL安装目录
1.3、从库配置
- 吧主库配置好的my.cnf文件复制到从库下的/etc/里面
scp /etc/.my.cnf 从库IP:/etc/
- 只需修改server-id = 2,即可
- 主
从
MySQL同时启动
/etc/init.d/mysqld start
2、创建同步账号
- 我们在主库上创建同步账号
- 给从库使用的特定账号
CREATE USER 'tongbu'@'%' IDENTIFIED WITH mysql_native_password BY '123'; -- 账号名可选
2.2、授权
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'%'; -- 只做同步的
- REPLICATION SLAVE 只做同步
查看状态
show master status
2.3、从库
定位主库bin-log文件
- 进入从库数据库
change master to master_host='主库IP地址',master_user='tongbu',master_password='123',master_log_file='bin-log文件',master_log_pos=点位;
change master to master_host='192.168.163.209',master_user='tongbu',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=656;
- IP = 主库IP
- 主库bin-log文件 = show master status。查看
- 主库点位 = show master status。查看
- 开启定位
start slave;
- 查看状态
show slave status\G
- 这个错误是因为主库没有开启3306端口,我们没有学到防火墙,所以直接禁用即可
systemctl stop firewalld 暂时停止防火墙
停止防火墙之后,再次查看,如果还有错误,重启MySQL!
- 这个是因为我们克隆两台机子,所以uuid一样
- 删除auto.cnf,重启MySQL即可
/data/mysql/auto.cnf -- 这个auto.cnf是在我们的MySQL安装目录
- 查看是否正常
show slave status\G
- 两个为yes,代表正常
2.4、同步成功
- 我们在主库创建dark库,他就会同步到从库里面
3、好处
- 同步可以替主库分担压力,读写过程,读取压力过大,我们有主库写,从库读
- 备份,主库创建的库,表,都会备份到从库里面