cd /etc
cp my.cnf my.cnf.back
2.1、备份数据库(3选择1,不用)
创建目录 mkdir /home/hd/package/mysqlback
备份数据库 备份实例上所有的数据库
mysqldump -u root -p --all-databases > /home/user/package/mysqlback/all_db.sql
2.2、备份整个数据目录(3选择1,需要操作)
进入mysql数据目录(my.cnf的datadir) cd /var/lib/
备份数据目录 tar -czvf mysql.tar.gz mysql
解压目录(当前不用)tar -xzvf mysql.tar.gz
2.3、备份整个数据库(3选择1,需要操作)
进入目录 cd /usr/share/
备份目录 tar -czvf mysql-8.0.tar.gz mysql-8.0
解压目录(当前不用)tar -xzvf mysql-8.0.tar.gz
service mysqld stop
rpm -qa|grep -i mysql 查看旧的数据库
mysql-community-client-8.0.16-2.el7.x86_64
mysql-community-libs-8.0.16-2.el7.x86_64
mysql-community-server-8.0.16-2.el7.x86_64
mysql-community-common-8.0.16-2.el7.x86_64
mysql-community-libs-compat-8.0.16-2.el7.x86_64
删除数据库,有顺序要求(common>libs>client>server)
rpm -e --nodeps mysql-community-common-8.0.16-2.el7.x86_64
rpm -e --nodeps mysql-community-libs-8.0.16-2.el7.x86_64
rpm -e --nodeps mysql-community-libs-compat-8.0.16-2.el7.x86_64
rpm -e --nodeps mysql-community-client-8.0.16-2.el7.x86_64
rpm -e --nodeps mysql-community-server-8.0.16-2.el7.x86_64
警告:/etc/my.cnf 已另存为 /etc/my.cnf.rpmsave
进入目录 cd ~
创建目录 mkdir mysql
解压 tar xvf mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar -C ./mysql
安装 cd mysql
sudo yum install mysql-community-{server,client,common,libs}-* --exclude=‘minimal’
cd …
修改配置文件,将my.cnf.back的配置拷到my.cnf中
cd /etc
mv my.cnf my.cnf.back2
mv my.cnf.back my.cnf
启动mysql服务
sudo service mysqld start
mysql -V
8.0.16版本是个分水岭,之后的版本升级一步就可以解决。
1.将正在运行的8.0.20停掉,解压8.0.22的压缩包,删除旧的软链接指向新的8.0.22
目的是保持my.cnf 的一致性。
2.之后进入bin目录,datadir指向已存在数据目录
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
3.停止再重新启动
为什么要主从复制
●做数据的热备
●如果主数据库宕机,可以快速将业务系统切换到从数据库上,可避免数据丢失。
●业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
●在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。通过做主从复制(读写分离)来减轻主数据库的负载。
主从复制流程:
( 1 )首先, MySQL主库在事务提交时会把数据变更作为事件 Events 记录在二进制日志文件Binlog中; MySQL主库上的 sync_binlog参数控制 Binlog日志刷新到磁盘。
( 2 )主库推送二进制日志文件 Binlog中的事件到从库的中继日志 Relay Log, 之后从库根据中继日志 Relay Log重做数据变更操作, 通过逻辑复制以此来达到主库和从库的数据一致。
MySQL通过3个线程来完成主从库间的数据复制:
当在从库上启动复制时,首先创建I/O程连接主库, 主库随后创建 Binlog Dump线程读取数据库事件并发送给 I/O线程, IO线程获取到事件数据后更新到从库的中继日志 Relay Log中去,之后从库上的 SQL线程读取中继日志RelayLog中更新的数据库事件并应用。
一个主节点,一个从节点,简单方便
●容易产生的问题:数据不一致;因此慎用
●考虑要点:自动增长id
解决方法:修改UUID
通过mysql生成一个uuid,等会用于修改
select uuid()
生成的uuid
c3e68eed-8e40-11eb-9d18-fefcfee28c83
修改236的uuid
vim /mysql/data/auto.cnf
server-uuid=c3e68eed-8e40-11eb-9d18-fefcfee28c83
从MySQL 5.7版本开始支持,也叫「多源复制」,数据流向是从多个主库同步数据到一个从库
多应用于:
数据汇总,可将多个主数据库同步汇总到一个从数据库中,方便数据统计分析。
读写分离,从库只用于查询,提高数据库整体性能。
在主从复制的基础上,主从之间存在一个级联复制的从服务器,当级联复制的主机复制了主服务器的数据,「级联复制主机充当为主服务器,从服务器复制级联复制主机的数据及二进制日志数据」。
中间级联复制的主机无法将二进制日志传递到其他从服务器上,因此需要加上log_slave_updates选项,「目的是为了将主服务器的二进制日志文件能写入到从服务器上」。