首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
183 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
32
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-11-27
MySQL数据库SQLSTATE[22007]: Invalid datetime format 日期类型不能为空值的解决办法
如果你的数据库是mysql,如果你创建表或插入数据时遇到的BUG--它长这样: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'xxx' at row 1 或 1067 - Invalid default value for 'xx' 那么我将赐予你 两套剑法:(一)追魂夺命剑:修改sql_mode参数值七十二路“追魂夺命剑”,此剑法快似闪电、迅捷无比,更兼招数精奇;”着“的一声刺中小怪sql_mode,小怪即便使出生平绝技”STRICT_TRANS_TABLES“,也会被剑击中咽喉,大叫一声摔倒见阎王,招数之快令人难以想象。SELECT @@sql_mode; #ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION set sql_mode ='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';重启mysql服务后小怪诈尸了,又使出”STRICT_TRANS_TABLES“,需要到改配置文件一劳永逸# 改变/etc/my.cnf(windows修改my.ini),重启mysql服务 [mysqld] sql_mode = ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION(二)玄铁重剑:使用NULL替代0000-00-00 00:00:00/0000-00-00用了重剑后,越是平平无奇的剑招,越是威力极大。但它还是有招式,还差那么一丁点到无招的境界,而且剑法也必须配合重剑使用才行。ALTER TABLE active_log MODIFY COLUMN start_date datetime NULL;建表SQLDROP TABLE IF EXISTS `active_log`; CREATE TABLE `active_log` ( `id` bigint(11) unsigned NOT NULL auto_increment, `start_date` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT '活动开始时间', created_date DATE DEFAULT '0000-00-00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2023年11月27日
71 阅读
0 评论
0 点赞
2023-11-27
哈希分表方法
/* * 根据账号名获取分表 * 函数接受两个参数,$u代表账号名,$n代表分表的数量,默认为256(即账号表分256张表) */ function calc_hash_tbl($u, $n = 256) { $h = sprintf('%u', crc32($u));//使用crc32函数计算账号名的哈希值,并使用sprintf函数将其转换为无符号整数 $h1 = intval($h / $n);//将哈希值除以分表数量$n得到$h1 return $h1 % $n;//将$h1对$n取模得到最终的分表索引值 }这个函数默认输出的值范围是从0到255,因为在最后一行代码中,对$h1取模$n的操作会得到0到$n−1的余数。$accountname = "xx"; $table = "account_info_".calc_hash_tbl($accountname); ...
2023年11月27日
9 阅读
0 评论
0 点赞
2023-11-21
CDN加速原理
CDN加速原理共享单车刚兴起的时候,喊出的是要解决大家最后一公里的问题。那么在互联网中,我们则需要来解决“第一公里“”的问题,也就是CDN对网络优化的作用。一、什么是 CDNCDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。 简单的说,CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验CDN对网络的优化作用主要体现在如下几个方面解决服务器端的“第一公里”问题缓解甚至消除了不同运营商之间互联的瓶颈造成的影响减轻了各省的出口带宽压力缓解了骨干网的压力优化了网上热点内容的分布二、CDN工作原理传统访问过程由上图可见,用户访问未使用CDN缓存网站的过程为:1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址. 2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期) 3.ROOT DNS将域名授权dns记录回应给 LocalDns 4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址 5.域名授权dns 查询域名记录后,回应给 LocalDns 6.LocalDns 将得到的域名ip地址,回应给 用户端 7.用户得到域名ip地址后,访问站点服务器 8.站点服务器应答请求,将内容返回给客户端.CDN访问过程通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址. 2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期) 3.ROOT DNS将域名授权dns记录回应给 LocalDns 4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址 5.域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns 6.LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址 7.智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns 8.LocalDns 将得到的域名ip地址,回应给 用户端 9.用户得到域名ip地址后,访问站点服务器 10.CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)通过以上的分析我们可以得到,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,需要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 由于用户访问网站的第一步就是域名解析,所以通过修改dns来引导用户访问是最简单有效的方式.CDN网络的组成要素对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器. 通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求. 由于它离用户更近,因而响应时间必然更快.从上面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器 之间.智能调度DNS(比如f5的3DNS) 智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上.缓存功能服务 负载均衡设备(如lvs,F5的BIG/IP) 内容Cache服务器(如squid) 共享存储三、名词解释CNAME记录(CNAME record)CNAME即别名( Canonical Name );可以用来把一个域名解析到另一个域名,当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。 例如,你有一台服务器上存放了很多资料,你使用docs.example.com去访问这些资源,但又希望通过documents.example.com也能访问到这些资源,那么你就可以在您的DNS解析服务商添加一条CNAME记录,将documents.example.com指向docs.example.com,添加该条CNAME记录后,所有访问documents.example.com的请求都会被转到docs.example.com,获得相同的内容。CNAME域名接入CDN时,在CDN提供商控制台添加完加速域名后,您会得到一个CDN给您分配的CNAME域名, 您需要在您的DNS解析服务商添加CNAME记录,将自己的加速域名指向这个CNAME域名,这样该域名所有的请求才会都将转向CDN的节点,达到加速效果。DNSDNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。比如:上网时输入的www.baidu.com会自动转换成为220.181.112.143。 常见的DNS解析服务商有:阿里云解析,万网解析,DNSPod,新网解析,Route53(AWS),Dyn,Cloudflare等。回源host回源host:回源host决定回源请求访问到源站上的具体某个站点。例子1:源站是域名源站为www.a.com,回源host为www.b.com,那么实际回源是请求到www.a.com解析到的IP,对应的主机上的站点www.b.com例子2:源站是IP源站为1.1.1.1, 回源host为www.b.com,那么实际回源的是1.1.1.1对应的主机上的站点www.b.com协议回源指回源时使用的协议和客户端访问资源时的协议保持一致,即如果客户端使用 HTTPS 方式请求资源,当CDN节点上未缓存该资源时,节点会使用相同的 HTTPS 方式回源获取资源;同理如果客户端使用 HTTP 协议的请求,CDN节点回源时也使用HTTP协议。
2023年11月21日
39 阅读
0 评论
0 点赞
2023-11-21
使用XHProf查找PHP性能瓶颈
使用XHProf查找PHP性能瓶颈XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法。下载网上很多是编译安装xhprof-0.9.4版本,应该是用php5,在php8.0下编译xhprof-0.9.4各种报错(编译安装这个拓展 tideways 不会报错),php7、php8环境下,建议下载最新版本https://pecl.php.net/package/xhprof安装Xhprof扩展cd /opt wget https://pecl.php.net/get/xhprof-2.3.9.tgz tar -zxvf xhprof-2.3.9.tgz cd xhprof-2.3.9 cd extension/ phpize ./configure make && make install修改php.ini[xhprof] extension=xhprof.so xhprof.output_dir=/tmp配置中xhprof.output_dir指定了生成的profile文件存储的位置,我们将其指定为/tmp。对PHP进行性能分析在XHProf扩展中,一共提供了四个函数用于对PHP进行性能分析。xhprof_enable/xhprof_sample_enable函数用于开始XHProf性能分析,区别在于前者功能更加强大,而后者则是是以简单模式启动性能分析(简单记录了函数的调用栈信息),开销比较小。xhprof_disable/xhprof_sample_disable函数用于停止性能分析,并返回分析的数据。需要特别说明的函数是xhprof_enable,其他函数都是不需要提供参数的,而该函数则可以接受两个可选的参数,用于改变该工具的行为。void xhprof_enable ([ int $flags = 0 [, array $options ]] )flags 该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。XHPROF_FLAGS_NO_BUILTINS 跳过所有的内置函数XHPROF_FLAGS_CPU 添加对CPU使用的分析XHPROF_FLAGS_MEMORY 添加对内存使用的分析options 数组形式提供可选参数,在此处提供ignored_functions选项需要忽略的函数比如下面的例子,同时对内存和CPU进行分析,并且忽略对call_user_func和call_user_func_array函数的分析。xhprof_enable( XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU, [ 'ignored_functions' => [ 'call_user_func', 'call_user_func_array' ] ] ); // 这里是PHP代码,比如业务逻辑实现等要被分析的代码部分 .... $xhprofData = xhprof_disable();// $xhprofData是数组形式的分析结果 print_r($xhprofData);注意,如果使用XHPROF_FLAGS_CPU选项对CPU占用也进行分析,在Linux环境下,会造成比较高的系统负载,因此不建议使用,而推荐只使用XHPROF_FLAGS_MEMORY,对内存的分析不会对系统造成太多负载。形象化的查看分析结果安装graphviz使用xhprof_disable完成性能分析并且获取到分析结果之后,我们通常不会直接输出结果,因为这样的结果是以数组形式组织的,看起来并不直观,幸运的是,xhprof提供了基于web的图形界面对分析结果进行查看。在使用之前,请先确保服务器安装了graphviz工具,否则在生成监控图表的时候回出现以下错误:failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '这里提示找不到dot命令,所以需要先安装graphvizyum -y install graphviz将xhprof安装包中的xhprof_html_和xhproflib目录放到服务器的web目录下由于分析结果的查看工具是基于web的,因此,我们需要将xhprof安装包中的xhprof_html_和xhproflib目录放到服务器的web目录下,让xhprof_html目录中的内容对外可以访问。比如我的测试服务器环境是使用vagrant搭建的CentOS,这两个目录放到/opt/xhprof-2.3.9目录下:cp -r /opt/xhprof-2.3.9/xhprof_html/ /www/nginx/php/xhprof_html cp -r /opt/xhprof-2.3.9/xhprof_lib/ /www/nginx/php/xhprof_libweb服务器使用的是Nginx,因此,修改Nginx的配置文件nginx.conf中的配置如下:server { location / { root /www/nginx/php;#等于php; index index.php index.html index.htm; } location ~ \.php$ { root /www/nginx/php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #支持解析php文件 include fastcgi_params; } 使用修改我们的代码,是其能够将分析结果存放到xhprof.output_dir(上面在php.ini设置的xhprof.output_dir=/tmp)指定的目录中。在 PHP 页面顶部加上:xhprof_enable(XHPROF_FLAGS_NO_BUILTINS + XHPROF_FLAGS_MEMORY);在页面底部加上:$xhprofData = xhprof_disable(); require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php'; require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php'; $xhprofRuns = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中 $runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');//第二个参数是定义文件名称 echo 'http://ip/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';变量$runId是本次请求生成分析结果的id,最后我们访问http://ip 页面输出了一个链接地址,使用该地址就可以看到本次请求的分析结果。注意到中间的View Full Callgraph链接,通过该链接我们可以看到图形化的分析结果。查看安装结果[root@xxx /]# php -i | grep xhprof xhprof xhprof support => enabled xhprof.collect_additional_info => 0 => 0 xhprof.output_dir => /tmp => /tmp xhprof.sampling_depth => 2147483647 => 2147483647 xhprof.sampling_interval => 100000 => 100000查看分析结果文件[root@xxx /]# tree /tmp /tmp └── systemd-private-be08ad52244846b793f9a5c4600bb4dc-php-fpm.service-UXT6oP └── tmp ├── 655f4470f21de.xhprof_test.xhprof └── 655f48cb6e9bf.xhprof_test.xhprof [root@xxx /]# cat /tmp/systemd-private-be08ad52244846b793f9a5c4600bb4dc-php-fpm.service-UXT6oP/tmp/655f4470f21de.xhprof_test.xhprof a:1:{s:6:"main()";a:4:{s:2:"ct";i:1;s:2:"wt";i:889;s:2:"mu";i:61200;s:3:"pmu";i:25216;}}得到的是serialize后的数据<?php $str = 'a:1:{s:6:"main()";a:4:{s:2:"ct";i:1;s:2:"wt";i:889;s:2:"mu";i:61200;s:3:"pmu";i:25216;}}'; $arr = unserialize($str); var_dump($arr); array(1) { ["main()"]=> array(4) { ["ct"]=> int(1) ["wt"]=> int(889) ["mu"]=> int(61200) ["pmu"]=> int(25216) } }
2023年11月21日
24 阅读
0 评论
0 点赞
2023-11-20
nginx+php+mysql
nginx下载安装https://nginx.org/download yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel #编译环境 cd /opt wget https://nginx.org/download/nginx-1.25.3.tar.gz tar zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3 mkdir -p /www/nginx ./configure --prefix=/www/nginx make && make install启动/www/nginx/sbin/nginx常用指令nginx -V 查看版本,以及配置文件地址nginx -v 查看版本nginx -c filename 指定配置文件nginx -h 帮助nginx -s reload|reopen|stop|quit // 重新加载配置|重启|停止|退出 nginx")重新加载配置|重启|停止|退出 nginxnginx -t //查看配置是否有语法错误nginx -c /usr/local/etc/nginx/nginx.conf //启动是加载指定nginx.conf文件建立软链接建立软链接目的是省去根目录快捷操作nginx[root@xxx opt]# ln -s /www/nginx/sbin/nginx /usr/sbin/ [root@xxx opt]# nginx -v nginx version: nginx/1.25.3 # 删除软连接 rm -rf /usr/sbin/nginx安装启动好php-fpm后,修改nginx.conf并重启nginx把 /scripts$fastcgi_script_name** 改成 **$document_root$fastcgi_script_namelocation ~ \.php$ { root /www/nginx/php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #支持解析php文件 include fastcgi_params; } 重启nginxnginx -t nginx -s reloadPS:如果还报错 [error] 37432#0: *85 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream 那一定是php文件路径不对phpyum方式安装用yum方式安装php最新版1 安装 epel-release源和 源管理工具yum-utilsyum -y install epel-release yum-utils2 安装Remi软件源Remi软件源官方地址: https://rpms.remirepo.net/CentOS7安装:yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpmCentOS7启动php模块并安装:yum启动php模块,根据需要选择自己格式的版本,如remi-php74模块,就是php7.4版本。:yum-config-manager --enable remi-php80 #启用remi源的php8.0模块注:如果显示没有这个命令,则需要先安装yum -y install yum-utils 插件。安装php及相关扩展:yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis安装成功:php -v 查看版本为php8.0版本3 启动php-fpm[root@xx logs]# whereis php-fpm php-fpm: /usr/sbin/php-fpm /etc/php-fpm.d /etc/php-fpm.conf /usr/share/man/man8/php-fpm.8.gz [root@xx logs]# systemctl start php-fpm mysqlyum安装mysql MySQL三种安装方法(yum安装、编译安装、二进制安装)yum安装mysql1.卸载旧版mysql如果安装过先卸载,第一次安装略过此步[root@bunian etc]# rpm -qa | grep mysql mysql-community-common-5.7.38-1.el7.x86_64 mysql-community-client-5.7.38-1.el7.x86_64 mysql80-community-release-el7-6.noarch mysql-community-server-5.7.38-1.el7.x86_64 mysql-community-libs-5.7.38-1.el7.x86_64 # 所有组件都要删除 [root@bunian etc]# rpm -e --nodeps mysql-community-common-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql-community-client-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql80-community-release-el7-6.noarch [root@bunian etc]# rpm -e --nodeps mysql-community-server-5.7.38-1.el7.x86_64 [root@bunian etc]# rpm -e --nodeps mysql-community-libs-5.7.38-1.el7.x86_64 # 清理yum headers cache [root@bunian etc]# yum clean all2.安装2.1 rpm安装yum源[root@bunian tmp]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm2.2 下载rpm源文件再安装[root@bunian tmp]# wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm [root@bunian tmp]# yum localinstall mysql80-community-release-el7-6.noarch.rpm3.选择mysql版本[root@bunian tmp]# yum repolist all | grep mysql mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Comm 禁用 mysql-cluster-7.5-community-source MySQL Cluster 7.5 Comm 禁用 mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Comm 禁用 mysql-cluster-7.6-community-source MySQL Cluster 7.6 Comm 禁用 mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Comm 禁用 mysql-cluster-8.0-community-debuginfo/x86_64 MySQL Cluster 8.0 Comm 禁用 mysql-cluster-8.0-community-source MySQL Cluster 8.0 Comm 禁用 mysql-connectors-community/x86_64 MySQL Connectors Commu 启用: 192 mysql-connectors-community-debuginfo/x86_64 MySQL Connectors Commu 禁用 mysql-connectors-community-source MySQL Connectors Commu 禁用 mysql-tools-community/x86_64 MySQL Tools Community 启用: 90 mysql-tools-community-debuginfo/x86_64 MySQL Tools Community 禁用 mysql-tools-community-source MySQL Tools Community 禁用 mysql-tools-preview/x86_64 MySQL Tools Preview 禁用 mysql-tools-preview-source MySQL Tools Preview - 禁用 mysql57-community/x86_64 MySQL 5.7 Community Se 禁用 mysql57-community-source MySQL 5.7 Community Se 禁用 mysql80-community/x86_64 MySQL 8.0 Community Se 启用: 343 mysql80-community-debuginfo/x86_64 MySQL 8.0 Community Se 禁用 mysql80-community-source MySQL 8.0 Community Se 禁用默认是开启8.0版本4.去除公钥检索校验 (最重要的地方)这个地方容易出错,原因是没有去除校验导致服务安装后无法启动#gpgcheck改成0 [root@bunian tmp]# vim /etc/yum.repos.d/mysql-community.repo [mysql80-community] name=MySQL 8.0 Community Server baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql5.安装mysql[root@bunian tmp]# yum install mysql-community-server6.配置mysql[root@bunian tmp]# vim /etc/my.cnf [mysqld] # 不区分大小写 lower_case_table_names=1 # 端口号 port = 3306lower_case_table_names7.启动mysql[root@bunian tmp]# systemctl start mysqld8.修改mysql root密码及外网访问初始密码在这里/var/log/mysqld.log# 密码是:6;-#?gn*q;0H [root@bunian etc]# grep 'temporary password' /var/log/mysqld.log 2022-06-21T03:25:39.021858Z 1 [Note] A temporary password is generated for root@localhost: 6;-#?gn*q;0H登录mysql修改密码[root@bunian etc]# mysql -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.35 Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpasswd'; mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed修改外网访问在 mysql 数据库的 user 表中查看当前 root 用户的相关信息select host, user, authentication_string, plugin from user;执行完上面的命令后会显示一个表格查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。授权 root 用户的所有权限并设置远程访问update user set host='%' where user='root'; GRANT ALL ON *.* TO 'root'@'%'; GRANT ALL ON *.* TO 'root'@'%';执行两次 GRANT ALL ON . TO 'root'@'%';刷新权限mysql> flush privileges;9.检验是否安装成功# 查看mysql端口号 [root@bunian etc]# netstat -nltp | grep 3306 tcp6 0 0 :::33060 :::* LISTEN 1292/mysqld tcp6 0 0 :::3306 :::* LISTEN 1292/mysqld 10.Navicat连接用Navicat连接报错:2059 - Authentication plugin 'caching_sha2_password' cannot be loaded原因以及解决办法由于目前已有的客户端连接软件还不支持Mysql8新增加的加密方式: caching_sha2_password 所以我们需要修改用户的加密方式,将其改为老的加密验证方式: mysql_native_password#登录 mysql -h localhost -p #选择数据库 use mysql; # 注意:先 select host, user from user; 查看host值再决定以下是'root'@'%' 还是 'root'@'localhost' ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的数据库密码'; #刷新权限 FLUSH PRIVILEGES; 11.php连接mysql连接Navicat创建test数据库、new表vim /www/nginx/php/index.php<?php $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 执行查询 $sql = "SELECT * FROM new"; $result = $conn->query($sql); // 输出数据 if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - name: " . $row["name"]. "<br>"; } } else { echo "0 结果"; } //访问ip/index.php id: 1 - name: 测试文章
2023年11月20日
37 阅读
0 评论
0 点赞
1
...
34
35
36
...
112