MySQL8.0安装
MySQL的最新版是8.0.x版本,与5.x版本相比,不仅仅快了很多,而且还带来了大量的更新和更快的性能,在读写工作负载,IO密集型工作负载中有着更加强劲的性能,使用了utf-8mb4作为默认字符集,同时增强了安全性。
# yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm(国外源,速度很慢)
推荐使用国内源进行安装:
# yum install http://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql80-community-el7/mysql80-community-release-el7-3.noarch.rpm
批量替换源内部的链接成国内源,加速安装速度,国外源安装速度奇慢:
# sed -i 's#repo.mysql.com/yum#mirrors.tuna.tsinghua.edu.cn/mysql/yum#; s/mysql-\([0-9]\)\.\([0-9]\)/mysql\1\2/; s#/el/\([0-9]\)/#-el\1/#; s#$basearch/##' /etc/yum.repos.d/mysql-community.repo
查看mysql8.0是否开启安装:
# yum repolist all | grep mysql
从上面可以看出,会默认下载5.7版本的MySQL数据库,而8.0版本的默认是关闭的,先把5.7的禁用,启用MySQL 8.0数据库。
打开文件, 修改设置:
# vim /etc/yum.repos.d/mysql-community.repo
输入命令后显示如下代码,每一个模块代表一个版本数据库。
其中可以看到5.7版本, enabled=1, 改为enabled=0, 禁用掉
另外可以看到8.0版本, enabled=0, 改为enabled=1, 开启
修改完之后查看可以用的MySQL版本:
# yum repolist enabled | grep mysql
# yum install -y mysql-community-server
每个数据库修改数据库的配置信息(每个节点都需要修改):
创建mysql数据目录:
# mkdir /data/mysql/data -p
# mkdir /data/mysql/log -p
修改文件夹的权限:
# chown -R mysql:mysql /data/mysql/
修改mysql的配置信息如下文件:
修改完成后启动MySQL
# systemctl start mysqld
报错修复:
执行: rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再次进行服务安装:yum -y install mysql-server
然后再启动:# systemctl start mysqld
设置开机启动
# systemctl enable mysqld
MySQL启动状态
# systemctl status mysqld
安装完成之后会在LOG文件( /var/log/mysqld.log)中生成一个默认的临时密码,可根据自己的实际情况修改(冒号后面为旧密码)。
cat /var/log/mysqld.log
可以使用如下命令进行查找初始密码:
(由于我们修改了配置文件,通过指定文件获取初始密码)
# cat /data/mysql/log.err |grep password
2019-08-24T05:33:04.727785Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jb_klPPYe12W
# mysql -uroot -p
修改账号密码:
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Kh_2022!';
新密码强度默认为中等,需要同时有大小写字母、数字、特殊符号,只有修改成功后才能修改配置再设置更简单的密码
主从复制设置
主从配置需要注意的点
主从服务器操作系统版本和位数一致;
Master 和 Slave 数据库的版本要一致;
Master 和 Slave 数据库中的数据要一致;
Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;
修改 Master 的配置文件/etc/my.cnf
# vim /etc/my.cnf
在my.cnf文件中加入如下配置内容:
[mysqld]
log-bin=mysql-bin
server-id=101
2. 从节点(Slave)配置:
修改 Slave 的配置文件/etc/my.cnf:
vim /etc/my.cnf
在my.cnf文件中加入如下配置内容:
[mysqld]
log-bin=mysql-bin
server-id=102
3. 创建用于复制操作的用户
在主节点创建一个用户repl,用于从节点链接主节点时使用。
mysql> create user 'repl'@'%' identified by 'password';
mysql> grant replication slave,replication client on *.* to 'repl'@'%';
mysql> flush privileges;
4. 获取主节点当前binary log文件名和位置(position)
mysql> show master status;
5. 在从节点(Slave)上设置主节点参数
mysql> change master to
master_user='repl',
master_password='password',
master_host='172.18.117.73',
master_log_file='mysql-bin.000001',
master_log_pos=846;
6. 查看主从同步状态
mysql> show slave status\G
7. 开启主从同步(从节点执行)
mysql> start slave;
8. 再查看主从同步状态
mysql> show slave status\G
查看状态时,可能会出现I/O任务启动失败的情况,即如下错误:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
这是因为在MySQL主从结构中,从机上的server_id和主机上的server_id不能相同,我们可以看一下主机上的server_id和从机上的server_id是否相同。
mysql> show variables like 'server_id';
主机:
从机:
这里我们把从机的server_id改成2
mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
重新开启同步并查看装态(从节点执行同步操作):
mysql> start slave;
mysql> show slave status\G
开启主从之后,如果状态如上图所示,那么说明主从信息就已经配置好了,接下来我们测试一下在主机上创建一个数据库,然后在从机上是否能够同步创建。
首先看一下我们主机和从机除了MySQL本身自带的数据库之前目前是没有任何数据的。
数据库字符串编码查看:
mysql> show variables like 'character%';
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
//创建用户
mysql> create user 'test_user' identified by 'password';
//创建数据库wiki
mysql> create database test;
//给用户授权(授权给所有用户使用)
mysql> grant all on *.* to 'test_user'@'%';
//授权某一个数据库的权限
mysql> grant all on test.* to 'test_user'@'%';
//刷新系统权限表
mysql> flush privileges;
如果需要操作延长会话时间,则需要进行参数设置:
mysql> SHOW GLOBAL VARIABLES LIKE '%timeout%';
其次连接超时wait_timeout设置方法如下:
Linux系统下,配置文件为路径/etc/my.cnf(28800秒合计8小时)
[mysqld]
wait_timeout=28800
interactive_timeout=28800
保存退出,重启MySQL服务即可:
# systemctl restart mysqld
mysql 从如何重新同步_mysql-主从复制使数据库重新同步
1.先进入主库,进行锁表,防止数据写入
使用命令:(由于退出客户端后自动释放锁,所以要一直开一个客户端用来保持加锁状态)
mysql> flush tables with read lock;
注意:当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。退出客户端后自动释放锁;
2.进行数据备份
#把数据备份到mysql-bak.sql文件,导出所有的数据表
# mysqldump -uroot -p --default-character-set=utf8 --databases crmdb nacos test > /root/mysql-bak.sql
这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失(可以考虑使用定时任务去执行脚本)
(另一种加锁方式:就是在导出的时候加上锁表语句,然后在导出的时候,查看master 状态,这样也是准确的:mysqldump -uroot -p --default-character-set=utf8 --lock-all-tables --databases crmdb nacos test > /root/mysql-bak.sql,注意--lock-all-tables是锁定所有表,这整个全局读锁会一直持续到导出结束。)
3.查看master 状态(须在加锁状态下,才能准确查看位置)
mysql> show master status;
4. 把mysql备份文件传到从库机器,进行数据恢复
#使用scp命令拷贝到远程机器
# scp mysql.bak.sql [email protected]:/root/
5.停止从库的状态
mysql> stop slave;
6.然后到从库执行mysql命令,导入数据备份
mysql> source /root/mysql-bak.sql;
7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项:
mysql>change master to
master_user='repl',
master_password='Admin_r00t_321',
master_host='172.18.17.16',
master_log_file='mysql-bin.000001',
master_log_pos=6873;
8.重新开启从同步
mysql> start slave;
9.查看同步状态
mysql> show slave status\G
查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
好了,同步完成啦。
10.解锁主库(关闭客户端自动会解锁全局锁):
mysql> unlock tables;