MySQL5.7安装及主从配置
2021年9月
目 录
MySQL5.7安装及主从配置 1
1 文档介绍 3
1.1 文档目的 3
1.2 文档范围 3
1.3 读者对象 3
1.4 参考文献 3
1.5 术语与缩写解释 3
2 安装MySQL 3
2.1 操作系统磁盘分区及目录说明 3
2.2 基础环境准备 4
2.2.1 禁止iptables 4
2.2.2 禁止 selinux 4
2.3 安装MySQL 5
2.3.1 下载MySQL安装包 5
2.3.2 上传MySQL安装包 5
2.3.3 添加组和用户 5
2.3.4 解压MySQL安装包 6
2.3.5 创建软链接 6
2.3.6 创建基本目录 6
2.3.7 创建/etc/my.cnf配置文件 6
2.3.8 数据库初始化 7
3 MySQL主从配置 10
mysql主从同步配置 10
4 测试MySQL主从配置 19
1 文档介绍
1.1 文档目的
文档主要描述MySQL5.7安装,这里以操作系统REHAT7.7为例,数据库版本5.7.27为例。
1.2 文档范围
1.3 读者对象
项目实施人员、安装与维护人员等。
1.4 参考文献
1.5 术语与缩写解释
缩写、术语 解 释
2 安装MySQL
2.1 操作系统磁盘分区及目录说明
目录 用处
/ Linux系统文件及一些常用软件放置,生产环境建议把/var、/opt、/home可以考虑单独独立出来。
/u01/mysql/mysql 数据库安装位置
/u01/mysql/mysql/data 数据库保存位置, (对于压力大数据库建议单独划分)
/u01/mysql/mysql/log 日志保存位置, 用于存储mysql的binlog日志文件。(对于压力大数据库建议单独划分)
说明:swap不要划分,对于频繁进行读写操作的OLTP系统而言,响应时间过长很可能会直接拖垮整个系统。
对于数据库压力比较大的服务器,可以在考虑将数据文件与日志文件分开存储。也就是在安装操作系统时,单独划分/logs磁盘空间。
scp /u01/upload/mysql-5.7.27-el7-x86_64.tar.gz [email protected]:/u01/upload/
从一台服务器上将mysql安装包给复制到另一台服务器上去
[[email protected] upload]# scp /u01/upload/mysql-5.7.27-el7-x86_64.tar.gz [email protected]:/u01/upload/
Warning: Permanently added ‘192.168.92.14’ (ECDSA) to the list of known hosts.
[email protected]’s password:
mysql-5.7.27-el7-x86_64.tar.gz 100% 681MB 180.3MB/s 00:03
2.2 基础环境准备
服务器 端口
192.168.92.13 3313
192.168.92.14 3313
2.2.1 禁止iptables
[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# chkconfig --list|grep iptables
[[email protected] ~]#
2.2.2 禁止 selinux
[[email protected] ~]# getenforce 0
[[email protected] ~]# vim /etc/sysconfig/selinux
把SELINUX=enforcing 替换为:
SELINUX=disabled
2.3 安装MySQL
2.3.1 下载MySQL安装包
2.3.2 上传MySQL安装包
将MySQL安装包mysql-5.7.27-el7-x86_64.tar.gz上传至/u01/upload目录下。
[[email protected] ~]# cd /u01/upload/
[[email protected] software]# ls
mysql-5.7.27-el7-x86_64.tar.gz
2.3.3 添加组和用户
[[email protected] upload]# groupadd mysql
[[email protected] upload]# useradd -g mysql -s /sbin/nologin -d /u01/mysql/mysql mysql
[[email protected] upload]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
说明:/u01/mysql/mysql为MySQL软件安装目录
2.3.4 解压MySQL安装包
将MySQL安装包解压至/u01/mysql/mysql目录
[[email protected] ~]#mkdir /u01/mysql/mysql
[[email protected] ~]# cd /u01/mysql/mysql
[[email protected] mysql]# tar -zxvf /u01/upload/mysql-5.7.27-el7-x86_64.tar.gz
[[email protected] upload]# tar -zxvf mysql-5.7.27-el7-x86_64.tar.gz(与上面一样目的 解压)
[[email protected] mysql]# ls -lh
total 4.0K
drwxr-xr-x 9 7161 31415 4.0K Jul 12 21:03 mysql-5.7.27-el7-x86_64
[[email protected] mysql]# du -sh mysql-5.7.27-el7-x86_64/
2.5G mysql-5.7.27-el7-x86_64/ //MySQL安装目录大小为2.5G
2.3.5 创建软链接
[[email protected] mysql]# mv /u01/mysql/mysql/mysql-5.7.27-el7-x86_64/* /u01/mysql/mysql
[[email protected] mysql]# cd /usr/local/
[[email protected] local]# ln -s /u01/mysql/mysql mysql
2.3.6 创建基本目录
[[email protected] local]# mkdir -p /u01/mysql/mysql/data
[[email protected] local]# mkdir -p /u01/mysql/mysql/log
[[email protected] local]# mkdir -p /u01/mysql/mysql/tmp
[ro[email protected] mysql3306]# chown -R mysql:mysql /u01/mysql/mysql
2.3.7 创建/etc/my.cnf配置文件
直接在/etc目录下替换或者新建my.cnf文件。内容见附件
[[email protected] etc]# pwd
/etc
[ro[email protected] etc]# cp my.cnf my.cnf.bak202109281501 这个是最新的。。。注意
2.3.7.1 添加环境变量
[[email protected] mysql]# echo P A T H e c h o " e x p o r t P A T H = PATH echo "export PATH= PATHecho"exportPATH=PATH:/u01/mysql/mysql/bin">> /etc/profile
source /etc/profile
2.3.8 数据库初始化
初始化命令:
[[email protected] ~]# /u01/mysql/mysql/bin/mysqld –initialize 正常执行这个就行
如果该步骤执行报错的话
[[email protected] bin]# mysqld --initialize explicit_defaults_for_timestamp=true 补充说明
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决方法:[[email protected] data]# yum install -y libaio //安装后在初始化就OK了,但是初始化的时候也是需要注意的,要注意位数 这个才对
[[email protected] log]# yum install numactl.x86_64
注意:5.7版本初始化后会得到密码(在error.log日志中找到):PYtcUiQvx6)/ 必须记住此密码,用此登录后做权限更改操作。
[[email protected] logs]# cat error.log |grep password
2016-12-27T01:00:31.224648Z 1 [Note] A temporary password is generated for [email protected]: PYtcUiQvx6)/
[[email protected] log]# cat mysql-error.log |grep password
2021-09-28T08:22:16.272768Z 1 [Note] A temporary password is generated for [email protected]: ,sJ:x12alt=i
2.3.8.1 创建启动脚本
[[email protected] log]# cd /u01/mysql/mysql/
[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysql
2.3.8.2 启动MySQL服务
[[email protected] log]# /etc/init.d/mysql start
Starting MySQL. SUCCESS! [ OK ]
或者也可以这种方式启动:
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
2.3.8.3 登录MySQL并更改密码
[[email protected] log]# mysql -S /u01/mysql/mysql/mysql.sock -p
Logging to file ‘/data/local/mysql/log/query.log’
Enter password: —输入前面的密码PYtcUiQvx6 lMzb-ZVap6f2
注意:成功登录后执行命令提示如下。
(unknown)@localhost:mysql.sock 09:18:40 [(none)]>
show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 登录无操作权限,前面的提示符是“(unknown)”
2.3.8.4 更改MySQL数据库root用户密码
(unknown)@localhost:mysql.sock 09:22:48 [(none)]>alter user user() identified by ‘user’;
Query OK, 0 rows affected (0.00 sec)
alter user ‘root’@‘localhost’ identified by ‘fuhai1998’;
[email protected]:mysql.sock 09:24:51 [(none)]>—修改密码后,前面的提示符由“ unknown”修改为“root”
[email protected]:mysql.sock 09:24:51 [(none)]>show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.00 sec)
[email protected]:mysql.sock 09:50:39 [(none)]>
select user,host,authentication_string,plugin from mysql.user;
注意:mysql5.7mysql.user中无 “password” 字段;plugin 为“ mysql_native_password” 表示采用本地的加密认证,也可以采用其它加密方式,
如集中认证等+
-----------±----------±------------------------------------------±----------------------+
| user | host | authentication_string | plugin |
±----------±----------±------------------------------------------±----------------------+
| root | localhost | *52387EA2A80926B64E3F988ED7B1585AB22F5C14 | mysql_native_password |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
±----------±----------±------------------------------------------±----------------------+
2 rows in set (0.00 sec)
2.3.8.5 设置root远程连接(注:生产环境不建议设置)
“[email protected] Mon Aug 17 16:32:39 2015 16:32:39 [(none)]> grant all privileges on . to root@”%" identified by ‘user’ with grant option;
"[email protected] Mon Aug 17 16:32:47 2015 16:32:47 [(none)]>flush privileges;
"r[email protected] Mon Aug 17 16:33:02 2015 16:33:02 [(none)]>exit
2.3.8.6 MySQL用户账户管理及备份
对用户严格管理,单用户只能赋予执行单个业务的权限,防止对数据的误操作。示范命令如下:
创建用户:
Mysql> grant select,insert,update,delete on csf_cms.* to ‘csf_cms_admin’@‘192.168.0.97’ identified by ‘cca0810012045’;
查看用户:
MySQL> Select * from mysql.user;
Mysql> Select * from mysql.db;
Mysql> select * from mysql. tables_priv;
Mysql> select * from mysql. columns_priv;
Mysql> select * from mysql. procs_priv;
赋予权限
Mysql> grant update on csf_maec.* to ‘jerry.kang’@‘192.168.0.103’;
Mysql> grant update(flag) on csf_maec.ms_company to ‘jerry.kang’@‘192.168.0.103’;
收回权限
revoke drop on . from ‘sun.shang’@‘192.168.0.99’;
删除过期用户
mysql> drop user ‘glpiuser’@‘192.168.0.25’;
启动命令:su - mysql -c “/u01/mysql/mysql/mysqld start”
关闭命令su - mysql -c “/u01/mysql/mysql/mysqld stop”
主从服务器配置搭建
3 MySQL主从配置
mysql主从同步配置
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
首先确保主从服务器上的Mysql版本相同。
[[email protected] ~]# yum install mysql-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
3)、执行同步命令
mysql> change master to master_host=‘192.168.92.13’,
-> master_user=‘rep1’,
-> master_password=‘test123456’,
-> master_log_file=‘binlog.000004’,
-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start slave;
4)、查看从库的状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.92.14
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000004
Read_Master_Log_Pos: 154
Relay_Log_File: i-jzp7arkt-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: binlog.000004
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Replicate_Do_DB: yunweia
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 154
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 2003
Last_IO_Error: error connecting to master ‘[email protected]:3306’ - retry-time: 60 retries: 2
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID:
Master_Info_File: /u01/mysql/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 210929 14:12:39
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
上面是报错的 状态两个地方应该都为YES才对
mysql> change master to master_host=‘192.168.92.13’,
-> master_user=‘rep1’,
-> master_password=‘test123456’,
-> master_log_file=‘binlog.000004’,
-> master_log_pos=154;
ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL ‘’ first.
关闭io
mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
重新修改
mysql> change master to master_host=‘192.168.92.13’,
-> master_user=‘rep1’,
-> master_password=‘test123456’,
-> master_log_file=‘binlog.000004’,
-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
开启同步功能
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> start SLAVE IO_THREAD; #开启io线程
Query OK, 0 rows affected, 1 warning (0.00 sec)
还是报错 知道脚本是这样了才对。
mysql> stop SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
CHANGE MASTER TO MASTER_HOST=‘192.168.92.13’,MASTER_PORT=3313,MASTER_USER=‘rep1’,MASTER_PASSWORD=‘test123456’,MASTER_LOG_FILE=‘master-bin.000002’,MASTER_LOG_POS=154;
mysql> change master to master_host=‘192.168.92.13’,
-> master_user=‘rep1’,
-> master_password=‘test123456’,
-> master_log_file=‘binlog.000004’,
-> master_port=3313,
-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> start SLAVE ;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status\G;
至此可算是对了。。。。
4 测试MySQL主从配置
(1)、在主库上创建yunweia模式,即:
create schema yunweia; 可以用这种方式
create database yunweia; 两者其实差不多意思
(2)、在主库上的yunweia模式里面创建comm_config表,即:
use yunweia;
CREATE TABLE comm_config (configId varchar(200) NOT NULL ,configValue varchar(1024) DEFAULT NULL ,description varchar(2000) DEFAULT NULL ,PRIMARY KEY (configId)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
(3)、在主库上往comm_config表中插入一条记录,即:
insert into comm_config(configId, configValue, description) values(‘name’, ‘架构与我’, ‘测试一下’);
insert into comm_config(configId, configValue, description) values(‘FZY’, ‘只爱婷婷’, ‘测试一’);
脚本如下:
(4)、在从库上查看模式,即:
show databases;
(5)、在从库上查看yunweia模式下的表及数据,即:
use yunweia;
show tables;
结果为:
±------------------+
| Tables_in_yunweia |
±------------------+
| comm_config |
±------------------+
1 row in set (0.00 sec)
说明表也同步好了,再查看数据,即:
select * from comm_config;
结果为:mysql> select * from comm_config;
±---------±-------------±----------------+
| configId | configValue | description |
±---------±-------------±----------------+
| FZY | 只爱婷婷 | 只爱巩婷婷 |
| name | 架构与我 | 测试一下 |
| name111 | 架构与我 | 测试两下 |
±---------±-------------±----------------+
说明数据也同步过来了。
5 今天早晨突然发现数据不同步了,查看状态的发现是Slave_IO_Running: Yes Slave_SQL_Running: N
1)安装html2canvasnpm install html2canvas --save 2) 下载Canvas2Image.js,我这里下载好了,直接复制使用即可/** * covert canvas to image * and save the image file */var Canvas2Image = function () { // c...
Qt布局管理(4):网格布局(QGridLayout类)若对C++语法不熟悉,建议参阅《C++语法详解》一书,电子工业出版社出版1、网格布局原理(见图5-17):基本原理是把窗口划分为若干个单元格,每个子部件被放置于一个或多个单元格之中,各单元格的大小可由拉伸因子和一行或列中单元格的数量来确定,若子部件的大小(由sizeHint()确定)小于单元格,则可以设置该子部件位于单元格的什么位置(顶...
Quarkus是一个由Red Hat开源的 Java 微服务框架,根据2020年8月18日发布的《 2020 年微服务领域开源数字化报告》,Quarkus 作为云原生微服务框架,在微服务框架中活跃度排名第一,全球 GitHub 开源项目活跃度中排名 40,也具有着巨大的影响力。虽然目前SpringBoot拥有着几乎不可动摇的地位,但对于其他的微服务框架,还是可以了解下的,下面就来看下如何使用Quarkus来构建一个web服务吧。
二分查找法说的通俗一点就是折半查找,每查找一次,所对应的元素就会减少一半,所以这种方法的优点就是比较的次数少,查找的速度快。但其最大的缺点就是插入数据比较困难。所以在面对数据一直会发生变动的列表,就不推荐用二分查找法了。 那么下面就来实际介绍一下这种方法,如果一个表中的元素按照由小到大来排列,找到表中间位置,并与查找的key值比较,如若相等,就说明查找成功。如果不相等,就一中间位置
第一步,首先要建立与数据库的连接,方法较多,这里举个例子:http://www.cnblogs.com/netsql/archive/2010/05/17/1737548.html 第二个,打开PD15,新建一个PDM文档,然后新建一个表,如图所示:第3步:打开T_ID列的属性设置,设置自动生成如何设置步长呢:如下:点击自动递增列,如图所示,有一个Microsoft的列
使用QPrinter打印文件时,有时不同的DPI打印出来效果不一样,这个问题是由于DPI不同导致的;可以使用QPrinter的setResolution();来设置DPI,需要注意的是这个函数调用必须放在begin调用之前才能生效。参考:Qt之高DPI显示器(一) - 解决方案整理 - 朝十晚八 - 博客园https://www.cnblogs.com/swarmbees/p/12004594.html...
需求如下:这里是在form表单中做的<el-form-item label="凭证照片" ref="loadElement" prop="picList"> <el-upload action="#" ref="upload" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-re
1、打开控制面板,共享文件夹,新增一个共享文件夹,我这给的文件夹名字是downloads2、我没设置加密3、高级设置不需要设置4、应用5、根据你的需要,给相应的用户设置权限,我这只有一个用户,所以用的是默认6、打开File Station,在刚才我们新建的downloads文件夹上点右键,属性7、在权限标签栏,新增,选择Everyone用户组,勾选读取和写入,应用8、勾选应用到这个文件夹、子文件夹...
第三方登录,基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,比如GitHub、微博、微信、QQ 等。第三方登...
docker的坑Docker 解决 CentOS7 容器 Failed to get D-Bus connection: Operation not permittedDocker 解决 CentOS7 容器 Failed to get D-Bus connection: Operation not permitted现象:在执行systemctl httpd start时,出现错误:Fail...
摘要:结合德勤行业经验以及中国医疗健康行业特点的理解,德勤认为有五大趋势对未来中国的医疗健康行业将产生重大影响,并起到推动作用,包括整合型医疗健康服务体系、消费者摘要:医药产业互联网企业为各类医药企业搭建信息化平台,助力医药企业协同创新,构建新型商业模式。调研企业中,超六成企业与产业互联网企业展开合作 ,仅有 16.2% 的企业从未与其合作;药企与医药产业互联网企业合作的主要方向在于对零售商信息的掌握(64.6%)、运输供应链(53.5%)以及销售推广(40.4%),目前合作服务主要集中于产业链的中下游。
参考资料:快科技https://news.mydrivers.com/1/760/760737.htm