关于mariadb:centos7-安装-mariadb

一、装置筹备1、查看本人是否装置了mariadb rpm -qa | grep -i mariadb2、如果存在已装置,一一卸载这些包 rpm -e --nodeps xxx3、配置要装置的mariadb版本对应的yum源 https://mariadb.org/mariadb/all-releases抉择要下载的版本点击MariaDB Repositories,抉择对应的版本创立yum源信息文件 进入/etc/yum.repos.d文件夹下:cd /etc/yum.repos.d创立MariaDB.repo文件:touch MariaDB.repo把版本内容复制进去 vi /etc/yum.repos.d/MariaDB.repo 二、装置1、yum装置 yum install -y MariaDB-server MariaDB-client装置实现! 三、配置1、启动 Mariadb启动mariadb systemctl start mariadb设置为开机自启动 systemctl enable mariadb其余指令: 进行指令:systemctl stop mariadb重启指令:systemctl restart mariadb查看启动状态:systemctl status mariadb2、初始化、配置MariaDB mysql_secure_installation1、提醒输出root用户明码、装置后首次进入,明码为空、间接回车2、输出y、设置root明码3、输出y、删除匿名用户4、输出n,不禁用root近程登录5、输出y、删除test测试库6、输出y、从新加载权限配置实现! 四、设置近程登录1、登录到mysql、查看是否容许近程登录 select User, host from mysql.user;host有容许近程登录的主机否则:执行近程拜访指令 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '这里改成数据库明码root' WITH GRANT OPTION;%示意针对所有IP,password示意将用这个明码登录root用户刷新权限 FLUSH PRIVILEGES;退出mysql quit重启mysql systemctl restart mariadb五、配置疏忽大小写1、配置实现后可测试登录到mysql mysql -uroot -p2、查问大小写 SHOW GLOBAL VARIABLES LIKE 'lower_case_table_names';value为0,不疏忽大小写3、配置etc目录下my.cof配置文件在[mysqld]下加上 ...

February 14, 2023 · 1 min · jiezi

关于mariadb:MariaDB的安装与配置

我应用的是3A服务器搭建的centos7MariaDB是MySQL的一个分支,由开源社区保护,采纳GPL受权许可,齐全兼容MySQL.1.装置绝对应的源vi /etc/yum.repos.d/MariaDB.repo 填写如下内容(3选其一,我抉择的是阿里源)[mariadb] http://downloads.mariadb.org/...(官网源5.5)name = MariaDBbaseurl = http://yum.mariadb.org/5.5/ce...gpgkey=https://yum.mariadb.org/RPM-G...gpgcheck=1[mariadb] 官网源10.1name = MariaDBbaseurl = http://yum.mariadb.org/10.1/c...gpgkey=https://yum.mariadb.org/RPM-G...gpgcheck=1[mariadb] 阿里的源10.4name = MariaDBbaseurl = https://mirrors.aliyun.com/ma...gpgkey=https://mirrors.aliyun.com/ma...gpgcheck=1保留,退出2.革除缓存,加载配置yum clean allyum makecache3.装置mariadb(阿里源的mariadb包名是小写的,而官网源是大写的) 官网:yum install -y MariaDB-server MariaDB-client 阿里:yum install -y mariadb-server mariadb 4.启动mariadbsystemctl start mariadb4-1.相干MariaDB治理命令 重启systemctl restart mariadb 进行systemctl stop mariadb 开机自启systemctl enable mariadb 查看mariadb过程netstat -ntlp | grep 3306 或netstat -ntlp | grep mysql 6.MariaDB数据库初始化mysql_secure_installation17.初始化测试登陆mysql -uroot -p #进入数据库 8.MariaDB设置utf8编码(依据理论需要增加)vi /etc/my.cnf 输出以下内容:[mysqld]character-set-server=utf8init-connect='SET NAMES utf8'collation-server=utf8_unicode_ci9.MariaDB的简略应用1)批改明码set password = PASSWORD('huawei@123'); # 设置明码为huawei@1232)mysql常用命令(局部)desc 表名 # 查看表构造create database 数据库名; # 创立数据库create table 表名; # 创立数据表drop database 数据库名; # 删除数据库show create database 数据库库名; # 查看如何创立数据库show create table 表名; # 查看如何创立表10.MariaDB数据库备份与复原具体步骤:备份,复原前置条件create database one;create database two;show databases;\q #退出mysqlmkdir -p /tmp/mysqldcd /tmp/mysqldrm -rf *依据本人需要进行抉择1-1)备份所有的数据库mysqldump -u root -p --all-databases > /tmp/mysqld/db.dump #备份所有的数据库 ...

September 5, 2022 · 1 min · jiezi

关于mariadb:汉化Illustrator-2022更新

汉化Illustrator 2022更新到v26.4.1,常被称为“AI”,借助这款行业标准的矢量图形软件,您能够制作实用于印刷、Web、视频和挪动设施的徽标、图标、绘图、版式和插图的矢量图设计软件。Adobe Illustrator 2022 for Mac 是用于跨媒体设计的行业标准矢量绘图环境。通过形态,色彩,成果和版式表白您的创造力。装置这款汉化Illustrator 2022

August 3, 2022 · 1 min · jiezi

关于mariadb:Setup-MariaDB-MasterSlave-Replication-for-Docker-MariaDB

Setup MariaDB master container~/container-data/mariadb: MariaDB data files mount folder~/container-data/mariadb-log: MariaDB log files mount folderU need to specific a log-basename and server-id for masterdocker run --name medical-analysis-mariadb -v ~/container-data/mariadb:/var/lib/mysql -v ~/container-data/mariadb-log:/var/log/mysql -e MYSQL_USER=user -e MYSQL_ROOT_PASSWORD=root -e MYSQL_PASSWORD=123456 -p 3306:3306 -d mariadb:10.5.3 --log-bin --binlog-format=MIXED --log-basename=111 --server-id=111Retrieve Binlog positionExecute into master db container docker exec -it medical-analysis-mariadb /bin/bashLogin to mariadb mysql -u root -pCloses all open tables and locks all tables for all databases with a global read lock ...

December 12, 2021 · 2 min · jiezi

关于mariadb:MariaDB导入测试数据库employees

具体可参考:http://dev.mysql.com/doc/empl... 1、下载sample databasemysql employees sample database下载链接http://dev.mysql.com/doc/empl...https://github.com/datacharme...本地搬迁:https://gitee.com/glc400/test... 2、解压安装包$ unzip test_db-master.zip$ cd test_db-master/ 3、创立employee用户$ sudo mysqlMariaDB [(none)]> CREATE USER 'employee'@'%' IDENTIFIED BY 'employee';Query OK, 0 rows affected (0.000 sec)MariaDB [(none)]> QUIT;Bye4、调整数据库引擎The Employees database is compatible with all storage engines. You must edit the employee.sql and comment out the storage engine that you want to use: set storage_engine = InnoDB;-- set storage_engine = MyISAM;-- set storage_engine = Falcon;-- set storage_engine = PBXT;-- set storage_engine = Maria; ...

September 12, 2021 · 1 min · jiezi

关于mariadb:MariaDB数据库命令行指导

1、客户端命令mysql格局mysql [OPTIONS] [database] 罕用选项 -u, --user=username:用户名,默认为root;-h, --host=hostname:近程主机(即mysql服务器)地址,默认为localhost; 客户端连贯服务端,服务器会反解客户的IP为主机名,敞开此性能(skip_name_resolve=ON);-p, --password[=PASSWORD]:USERNAME所示意的用户的明码; 默认为空;-P, --port=#:mysql服务器监听的端口;默认为3306/tcp;-S, --socket=/PATH/TO/mysql.sock:套按字文件门路;-D, --database=DB_name:连贯到服务器端之后,设定其处指明的数据库为默认数据库;-e, --execute='SQL STATEMENT':连贯至服务器并让其执行此命令后间接返回;注:在下面的选项中,选项和参数之间能够不应用空格离开。 示例登录MySQL glc@LAPTOP-LEMON:~$ mysql -uadmin -pEnter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 45Server version: 10.3.31-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.2、查看客户端常见命令MariaDB [(none)]> helpGeneral information about MariaDB can be found athttp://mariadb.orgList of all MySQL commands:Note that all text commands must be first on line and end with ';'? (\?) Synonym for `help'. # 查看帮忙clear (\c) Clear the current input statement. # 清空以后输出的语句connect (\r) Reconnect to the server. Optional arguments are db and host. # 从新连贯服务器delimiter (\d) Set statement delimiter. # 设置语句分隔符(结束符),默认为分号';'edit (\e) Edit command with $EDITOR. # 编辑命令ego (\G) Send command to mysql server, display result vertically. # 发送命令至服务器,垂直显示后果exit (\q) Exit mysql. Same as quit. # 退出go (\g) Send command to mysql server. # 发送命令至服务器help (\h) Display this help. # 查看帮忙quit (\q) Quit mysql. # 退出source (\.) Execute an SQL script file. Takes a file name as an argument. # 读取SQL脚本system (\!) Execute a system shell command. # 执行shell命令tee (\T) Set outfile [to_outfile]. Append everything into given outfile. # 设置输入文件use (\u) Use another database. Takes database name as argument. # 指定数据库charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. # 指定字符集warnings (\W) Show warnings after every statement. # 显示正告信息nowarning (\w) Don't show warnings after every statement. # 不显示正告信息 查看mysql服务端帮忙信息,可应用help Contents: ...

September 12, 2021 · 4 min · jiezi

关于mariadb:MariaDB用户权限及权限管理扩展

MySQL/MariaDB用户权限及权限治理 1、MySQL权限级别介绍治理对象权限阐明全局能够治理整个MySQL库能够治理指定的数据库表能够治理指定数据库的指定表字段能够治理指定数据库的指定表的指定字段权限存储在MySQL库的user, db, tables_priv, columns_priv, procs_priv这几个零碎表中,待MySQL实例启动后就加载到内存中。 2、查看用户权限2.1、查看所有用户(用户名、给谁受权)MariaDB [(none)]> SELECT user, host, authentication_string FROM mysql.user;+----------+--------------+-------------------------------------------+| user | host | authentication_string |+----------+--------------+-------------------------------------------+| root | localhost | || admin | localhost | || admin | % | *9D59E8AF06195817B4585B0045A6601BBE64259F || jeffrey | % | || jeffreys | localhost | || wang | % | || wang1 | localhost | || wang3 | 192.168.1.59 | || wang4 | localhost | || lyshark | localhost | || lyshark | % | |+----------+--------------+-------------------------------------------+11 rows in set (0.000 sec)2.2、查看单个用户所有状况MariaDB [(none)]> SELECT * FROM mysql.user WHERE user='wang'\G*************************** 1. row *************************** Host: % User: wang Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Reload_priv: Y Shutdown_priv: Y Process_priv: Y File_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Repl_slave_priv: Y Repl_client_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: YCreate_tablespace_priv: Y Delete_history_priv: Y ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: authentication_string: password_expired: N is_role: N default_role: max_statement_time: 0.0000001 row in set (0.000 sec)\G 使每个字段打印到独自的行,也有’;'的作用。 ...

September 12, 2021 · 3 min · jiezi

关于mariadb:MariaDB账户和权限管理

1、MariaDB账户治理MariaDB提供了许多语句来治理用户账号,这些语句能够用来治理包含登陆和退出MariaDB服务器,创立用户,删除用户,明码治理和权限治理等,MariaDB数据库的安全性,须要通过账户治理来保障。 1.1、查问在线用户本地查问:当咱们本地登录到数据库时,能够应用本地查问,查问SQL语句如下: MariaDB [(none)]> SHOW processlist;+----+-------------+-----------------+-------+---------+------+--------------------------+------------------+----------+| Id | User | Host | db | Command | Time | State | Info | Progress |+----+-------------+-----------------+-------+---------+------+--------------------------+------------------+----------+| 3 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 || 2 | system user | | NULL | Daemon | NULL | InnoDB purge coordinator | NULL | 0.000 || 1 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 || 4 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 || 5 | system user | | NULL | Daemon | NULL | InnoDB shutdown handler | NULL | 0.000 || 41 | admin | localhost:55902 | mysql | Sleep | 174 | | NULL | 0.000 || 42 | admin | localhost:55904 | mysql | Sleep | 174 | | NULL | 0.000 || 43 | root | localhost | NULL | Query | 0 | Init | show processlist | 0.000 |+----+-------------+-----------------+-------+---------+------+--------------------------+------------------+----------+8 rows in set (0.000 sec)近程查问:如果在近程终端机上查问近程数据库,前提是数据库开启了近程受权咱们能够应用以下SQL语句: ...

September 12, 2021 · 7 min · jiezi

关于mariadb:MariaDB管理和基础配置

1、治理MariaDB服务命令(原生)命令(WSL)阐明sudo systemctl restart mariadbsudo service mysql restart重启MariaDB服务sudo systemctl start mariadbsudo service mysql start启动MariaDB服务sudo systemctl stop mariadbsudo service mysql stop进行MariaDB服务sudo systemctl status mariadbsudo service mysql status查看MariaDB服务状态

September 12, 2021 · 1 min · jiezi

关于mariadb:Ubuntu2004-WSL-安装-MySQLMariaDB

MariaDB是一个开源的关系数据库管理系统。它最后被设计为MySQL的向后兼容二进制二进制替换。MariaDB由MySQL的原始开发人员和凋谢源代码社区开发和保护。本指南阐明了如何在Ubuntu 20.04(WSL)上装置和爱护MariaDB。 1、根底条件本文装置环境为Ubuntu20.04 on WSL(Windows Subsystem for Linux),咱们假如您具备root用户或具备sudo权限的治理拜访权限。 2、装置MariaDBsudo apt updatesudo apt -y install mariadb-server装置实现后,MariaDB服务不会主动启动,请应用上面命令启动MariaDB服务: sudo service mysql start3、配置MariaDBMariaDB服务有一个脚本叫做mysql_secure_installation,它容许你能够很容易进步数据库服务器平安。执行不带参数的脚本: sudo mysql_secure_installation该脚本将提醒您输出root明码,因为您尚未设置root明码,只需在此处按“ Enter”。 Enter current password for root (enter for none):在下一个提示符下,将要求您设置MySQL root用户的明码,输出n: Set root password? [Y/n] n在Ubuntu上,auth_socket默认状况下插件会对MariaDB根用户进行身份验证。该插件通过查看调用客户端程序的本地零碎用户是否与指定的MariaDB用户名匹配来工作。 接下来,将要求您删除匿名用户,限度root用户对本地计算机的拜访,删除测试数据库并从新加载特权表。能够依照本人的爱好来批改: # sudo mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!In order to log into MariaDB to secure it, we'll need the currentpassword for the root user. If you've just installed MariaDB, andyou haven't set the root password yet, the password will be blank,so you should just press enter here.Enter current password for root (enter for none):OK, successfully used password, moving on...Setting the root password ensures that nobody can log into the MariaDBroot user without the proper authorisation.# 批改root用户明码Set root password? [Y/n] n ... skipping.By default, a MariaDB installation has an anonymous user, allowing anyoneto log into MariaDB without having to have a user account created forthem. This is intended only for testing, and to make the installationgo a bit smoother. You should remove them before moving into aproduction environment.# 删除匿名用户Remove anonymous users? [Y/n] y ... Success!Normally, root should only be allowed to connect from 'localhost'. Thisensures that someone cannot guess at the root password from the network.# 禁止root近程登录Disallow root login remotely? [Y/n] n ... skipping.By default, MariaDB comes with a database named 'test' that anyone canaccess. This is also intended only for testing, and should be removedbefore moving into a production environment.# 删除测试数据库和拜访权限Remove test database and access to it? [Y/n] n ... skipping.Reloading the privilege tables will ensure that all changes made so farwill take effect immediately.# 当初从新加载特权表Reload privilege tables now? [Y/n] y ... Success!Cleaning up...All done! If you've completed all of the above steps, your MariaDBinstallation should now be secure.Thanks for using MariaDB!4、以root身份登录要从命令行与MariaDB服务器进行交互,请应用mysql客户端实用程序或其别名mariadb。此工具是作为MariaDB服务器软件包的依赖项装置的。 ...

September 12, 2021 · 3 min · jiezi

关于mariadb:技术分享-MariaDB-迁移到-MySQL-的部分注意事项

作者:秦福朗 爱可生 DBA 团队成员,负责我的项目日常问题解决及公司平台问题排查。酷爱 IT,喜爱在互联网里畅游,善于摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~ 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 一、背景MariaDB 的产生背景想必大家都晓得,是由 MySQL 的创始人,在 MySQL 卖给 SUN 又被甲骨文收买后,以本人女儿名字命名的一款开源数据库。最后以其与 MySQL 的根本齐全的兼容互通和收费开源受到大家的欢送,甚至 CentOS7 都应用 MariaDB 替换了 MySQL 。所以对于 MariaDB 与 MySQL 的迁徙的案例也较多,本公众号之前也有共事写过相干文章,有趣味能够去看看,本篇写一下最近我的项目上遇到的迁徙产生的问题及注意事项。 环境为 MariaDB 10.3 到 MySQL 5.7.25 。 二、简略操作过程因 MariaDB 在5.5之后便不在追随 MySQL 的版本号,所以5.5之后是以10.0.0为版本号起始,官网查问到 MariaDB 10.3 与 MySQL 5.7 是实践上可兼容的,我的项目操作者把 MariaDB 的 my.cnf 配置文件去掉了不存在 MySQL 中的局部参数,而后用此配置文件装置了 MySQL ,之后 mysqldump 了 MariaDB 的库表数据,导入到 MySQL中 (这是通常应用的迁徙形式)。 三、导入数据报错1、md5(uuid())在导入过程中有报错信息如下: 从图中可看出导入过程中语法错误,MySQL 不辨认 md5(uuid()),依据提醒查看表构造: 能够看到主键列 instance_id 有个 default 属性,md5 函数嵌套 uuid 函数。在印象中没见过此种用法,遂以此为方向,去查看官网文档规定,如下: ...

August 2, 2021 · 1 min · jiezi

关于mariadb:在Linux上安装MariaDBMySQL数据库最新版

前言最近云服务器到期了,正好前几天购买了最新的树莓派,筹备在家里搭建一个小服务器用于编程测试。在配置 MariaDB 的时候发现和之前的形式有些许变动,当初整顿成这篇文章。 装置这里模仿的是在近程服务器配置 MariaDB,如果你是在本地装置能够对下列步骤自行取舍。 具体步骤如下: 第一步 通过 SSH 登录近程服务器,具体步骤能够参考在Mac上通过SSH登录近程服务器。 第二步 通过 apt 或者 yum 的形式装置 MariaDB,这里以 apt 为例(用何种形式装置,取决于你的 Linux 零碎和你的应用习惯) sudo apt-get update // 先对系统进行更新,不更新有时会呈现谬误sudo apt-get install mariadb-server // 更新实现后,装置 mariadb-server配置执行下列代码进行相干配置 sudo mysql_secure_installation // 留神要应用管理员权限执行首先提醒输出数据库 root 用户明码 Enter current password for root (enter for none):<–首次运行间接回车设置明码 Set root password? [Y/n] <– 是否设置root用户明码,输出y并回车或间接回车New password: <– 设置root用户的明码Re-enter new password: <– 再输出设置的明码其它配置 Remove anonymous users? [Y/n] <– 是否删除匿名用户Disallow root login remotely? [Y/n] <–是否禁止root近程登录Remove test database and access to it? [Y/n] <– 是否删除test数据库Reload privilege tables now? [Y/n] <– 是否从新加载权限表当然你也能够用上面的形式批改 root 明码: ...

July 7, 2021 · 2 min · jiezi

关于mariadb:UBUNTU-1604-LTS-SERVER-手动升级-MariaDB-到最新版-102

UBUNTU 16.04 LTS SERVER 手动降级 MariaDB 到最新版 10.21. 起因最近因为不同软件的数据问题原本只是一些小事弄着弄着就越弄越麻烦了,期间有这么个需要,没看到有中文资源,特记录一文。 2. 降级2.1 手动增加源并装置切记!在做任何改变前务必先用 mysqldump 将所有数据先备份进去!!!血的教训啊。。通宵了我两晚才将数据恢复回去 首先,确认你机子上有装 software-properties-common: sudo apt-get install software-properties-common接着增加 MariaDB 的仓库公钥到包治理中: sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8而后增加 MariaDB 10.1 的源: sudo sh -c "echo 'deb https://mirrors.evowise.com/mariadb/repo/10.1/ubuntu '$(lsb_release -cs)' main' > /etc/apt/sources.list.d/MariaDB101.list"这里最好是一步一步降级,所以先装 10.1 接着再升 10.2. 降级: # 更新sudo apt-get update# 降级sudo apt-get install mariadb-server mariadb-client而后增加 MariaDB 10.2 的源: sudo sh -c "echo 'deb https://mirrors.evowise.com/mariadb/repo/10.2/ubuntu '$(lsb_release -cs)' main' > /etc/apt/sources.list.d/MariaDB102.list"降级: ...

July 3, 2021 · 3 min · jiezi

关于mariadb:Linux安装mariadbjdk18

一. Linux装置 mariadb1.步骤:1.查看虚拟机是否能够正确连贯外网[root@localhost src]# ping www.baidu.com2.联网下载安装数据库[root@localhost src]# yum install mariadb-server3.如果下载失败,则清空安装文件[root@localhost src]# yum clean all4.数据库启动,重启,敞开等命令4.1 启动命令[root@localhost src]# systemctl start mariadb4.2 启动命令[root@localhost src]# systemctl restart mariadb4.3 敞开命令[root@localhost src]# systemctl stop mariadb5.数据库初始化操作(用于设置数据库登录明码) [root@localhost src]# mysql_secure_installation6.测试用户名或明码是否无效mysql -uroot -p 2.数据库可视化工具近程链接数据库阐明:① 如果须要近程连贯数据库必须通过防火墙② 如果近程链接数据库,数据库中必须开启近程拜访权限才行,否则回绝拜访2.1 切换到数据库mysql并查找数据表而后批改show databases -> use mysql -> show tables -> 找到user表 -> 查问user表局部字段select host,user,password from user -> 将host="localhost"改为"%"(示意任意的ip地址) -> 刷新数据库权限flush privileges 2.2 查看防火墙状态firewall-cmd --state2.3防火墙配置阐明:下次linux零碎开机后默认不启动防火墙systemctl disable firewalld.service 二. 装置jdk环境联网下载[root@localhost src]# yum install -y java-1.8.0-openjdk-devel.x86_64之后确认y晓得控制台返回Complete装置胜利查看java版本信息和是否显示帮忙信息java -version javac ...

November 18, 2020 · 1 min · jiezi

MySQLMariaDB-语句速查笔记

平时实际开发的时候,其实并不太依赖 MySQL 作为 关系型数据库 中的 “关系” 这一属性,更多地只是把 MySQL 作为数据存储的介质。因此 MySQL 语句其实很少写,所以本文用于记录一些 MySQL 在常规数据操作中的常用语法,备查。少用或者不用的知识就不列了。 本文地址:https://segmentfault.com/a/1190000019659700 基础 CURDCreate,添加数据INSERT INTO 表名 (列名, 列名, ...)VALUES (值, 值)Update,更新数据UPDATE 表名 SET 列名=值, 列名=值, ...WHERE 条件 ...Read,读取基本操作SELECT 列名, 列名, ... WHERE 条件 ...获取数据并去掉重复项SELECT DISTINCT 列名, 列名, ... WHERE 条件 ...Delete,删除DELETE FROM 表名 WHERE 条件 ...Find or Create 逻辑这是一个很实际的需求,业务需要依据条件获取一个条目,如果不存在,则创建该条目。如果用 select + insert 组合,那么这个操作并不原子。理想情况下是使用 UNIQUE,但很多时候并不行。那么可以采用以下的语句: INSERT INTO 表名 (列名1, 列名2, 列名3, ...)SELECT * FROM (SELECT 值1 AS 列名1, 值2 AS 列名2, 值3 AS 列名3, ...) AS tmpWHERE NOT EXISTS ( SELECT id FROM 表名 WHERE 条件 ...) LIMIT 1数据表操作、调整获取表信息desc 表名获取表创建语句show create table 表名添加字段# 非空、带默认值:ALTER TABLE 表名 ADD 列名 数据类型 NOT NULL DEFAULT 默认值 COMMENT 注释# 不带默认值:ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释# 指定添加字段的位置ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释 AFTER 前一列名修改字段# 修改字段类型ALTER TABLE 表名 MODIFY 列名 数据类型 ... # 后面的 ... 需要和前面添加字段的 “数据类型” 后面的那些项一致# 修改字段名ALTER TABLE 表名 CHANGE 列名 新列名 数据类型 ...MySQL 常用数据类型整型数值tinyint:相当于 int8_tsmallint:相当于 int16_tint:相当于 int32_tbigint:相当于 int64_t,建议用 bigint 存 timestamp 类型上述四种数据,可以加上 unsigned 表示无符号数,比如 tinyint unsigned 相当于 uint8_t定义整型数值时,可以在后面加上括号,写一个数字,如 int(11),这个数字仅仅表示显示长度(十进制),不影响实际数据位宽。 ...

July 4, 2019 · 1 min · jiezi

Spider引擎解决分库分表的尴尬

场景假设场景1:有两个分布在不通实例上的多张不通的表,想要通过某个字段关联,做一个统计,或者想将分布在不同实例的表,合并到一个实例中来做一些查询。 场景2:由于数据库容量的瓶颈或者是由于数据库访问性能的瓶颈,将一某一个大库、大表或者访问量非常大的表进行拆分,然后分布到不通的实例中。 简单来说就是水平、垂直拆分的场景 一、Spider引擎简介1、什么是Spider引擎Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎可以在服务器上建立和远程数据库表之间的链接,操作起来就像操作本地的表一样。并且对后台数据库的引擎没有任何限制。目前spider引擎已经集成到了MariaDB中。2、Spider架构图 3、Spider的优劣对比优势分析1.对业务完全透明,业务层不需要做任何的修改;对于分库和分表的操作业务层不需要关系,只需要通过spider作为代理入口,真实数据存储在哪台设备上,spider代理会自动进行路由。2.方便横向扩展,能解决单台mysql的性能和存储瓶颈33.对后端的数据库引擎没有限制4.实现垂直拆分和水平拆分功能,针对分表支持此哈希,范围,列表等算法5.完全兼容mysql协议劣势分析1.Spider本身不支持缓存和全文搜索,只能在后端数据库实现全文搜索2.Spider无法备份数据,只能对后端数据库做物理备份3.Spider本身是单点的,无法做灾备,只能通过VIP方式自己实现啊4.由于业务与数据库之间多了一层spider,在性能上多少会有些损耗二、Spider的使用场景解析1、垂直分表的场景和解析 从上图可以看出,spider后面接4台DB server,可以将不通功能的表分布到后端不通的DB server中,比如user_info的表专门存放在HostA中,user_msg表存放在了HostB中,user_detail表存放在了HostC中,user_log表存放在了HostD中。在图中的红色部分,当我们执行红色部分的SQL的时候,spider会通过user_info表的映射关系以及HostA的IP映射关系,将查询user_info表的请求都转发到HostA上,HostA查询完成后再将结果发给spider服务器,spider再转发给客户端2、水平分表的场景和解析 spider支持多种水平分表的模式,目前支持hash分表(hash)、范围分表(range)、列表分表(list),我这里用range来说明水平分表的工作原理。从上图中可以看出spider对user_info表针对id进行了分区,将0~100000的记录存储在了HostA,100000~200000的记录存储在了HostB,200000~300000的记录存储在了HostC,300000~400000的记录存储在了HostD。当用户访问user_info的某条或者多条记录的时候,spider会根据分区的情况,对相关的记录落在某台或者多台DB server上,再进行转发。比如select * from user_info where id=1这个SQL,spider在收到这个请求后,会跟进分区情况选择对应的DB server进行转发。这里会将该请求转发到HostA中。HostA处理完成后,再将结果返回给spider server,spider再将结果转发给发起请求的客户端。三、Spider引擎实战1、安装从spider 10.0.0.4版本开始,spider引擎就集成到了MariaDB中,集成后安装就非常的简单,安装步骤如下:1、安装mariaDB到spider server以及后端多台DB server上; 安装方法非常简单,请参考:https://mariadb.com/kb/en/mariadb/getting-installing-and-upgrading-mariadb/2、安装spider引擎到spider server上(后端的DB server不需要安装spider引擎) mysql -uroot -p < install_spider.sql 或者登录mysql后执行 source /path/install_spider.sql 备注:install_spider.sql在share目录下面 这个命令所做的事情如下: 创建spider相关的系统表 spider_link_failed_log spider_link_mon_servers spider_tables spider_xa spider_xa_failed_log spider_xa_member 创建spider相关的表结构 加载spider引擎2、使用未完待续~~~

June 3, 2019 · 1 min · jiezi

centos7-离线安装-mariadb-103

官方下载https://downloads.mariadb.com... 这个文件有400多M 按照里面的readme文档安装,最后会联网校验,实际上只是离线下载了文件,修改了软件源,还是要在线的 然后因为网络原因还经常校验失败... 安装完后通过rpm qa | grep MariaDB 来看实际上要安装的只有4个文件,使用rpm 安装一下就可以了 galera-25.3.25-1.rhel7.el7.centos.x86_64.rpmMariaDB-common-10.3.15-1.el7.centos.x86_64.rpmMariaDB-compat-10.3.15-1.el7.centos.x86_64.rpmMariaDB-server-10.3.15-1.el7.centos.x86_64.rpmrpm -ivh galera-25.3.25-1.rhel7.el7.centos.x86_64.rpm# 这个两个包相互依赖,需要一起安装rpm -ivh MariaDB-common-10.3.15-1.el7.centos.x86_64.rpm MariaDB-compat-10.3.15-1.el7.centos.x86_64.rpmrpm -ivh MariaDB-client-10.3.15-1.el7.centos.x86_64.rpmrpm -ivh MariaDB-server-10.3.15-1.el7.centos.x86_64.rpm最终这个4个包大小是47M

May 22, 2019 · 1 min · jiezi

MariaDB-开启慢查询-Log找出到底慢在哪个-Query-语句上-Slow-query-logHigh-CPU

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra 网路上写的设定档是 /etc/mysql/my.cnf但我实际去找是在 mariadb.conf.d 底下的 50-server.cnf 才是(可能是 Mysql 跟 MariaDB 的差别?) $ cd /etc/mysql/mariadb.conf.d使用 nano 开启 $ nano 50-server.cnf进入后会看到 [mysqld] ,直接在下面加上 slow_query 变成: [mysqld]# 开启慢日志功能slow_query_log = 1# 查询时间超过 2 秒则定义为慢查询(可自行改秒数)long_query_time = 2# 将产生的 slow query log 放到你指定的地方slow_query_log_file = /var/www/slow_query.log保存后别忘了重启资料库 systemctl restart mariadb.service验证是否成功开启先透过 CLI 进入 Mysql (Mariadb) $ mysql -u root -p进入后输入指令以下 MariaDB [(none)]> 简称为 > > show variables like '%quer%';会出现以下表格 ...

May 16, 2019 · 1 min · jiezi

Centos7-YUM安装MariaDB-100

Centos7 YUM安装MariaDB 10.0安装步骤(新装)1. 配置添加yum源文件 vim /etc/yum.repos.d/mariadb.repo # MariaDB 10.0 CentOS repository list - created 2016-05-30 02:16 UTC# http://downloads.mariadb.org/mariadb/repositories/[mariadb]name = MariaDB#baseurl = http://yum.mariadb.org/10.0/centos7-amd64baseurl = http://archive.mariadb.org/mariadb-10.0.10/yum/centos6-amd64/gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck= 0其他版本请参照官网修改版本号 2. 查配置yum源对应的mariadb版本是否正确 yum makecacheyum info MariaDB-server3. 安装MariaDB-server和Client yum install MariaDB-server MariaDB-client MariaDB-devel -y 注:如果有提示和以前安装的版本冲突,您可能需要先移除以前安装的包,例如: yum remove mariadb-libs.4. 新建数据目录并创建mysql用户 mkdir -p /data/dbdata/data/ && useradd mysql -s /sbin/nologin5. 初始化数据库目录 mysql_install_db --datadir='/data/dbdata/data/'6. 修改权限并手工命令启动 chown mysql:mysl /data/dbdata/data/ -Rcd '/usr' ; /usr/bin/mysqld_safe --datadir='/data/dbdata/data/' &7. 初始化数据库权限mysql_secure_installation ...

May 14, 2019 · 2 min · jiezi

透过 Crontab 排程备份 Mariadb (Mysql)使用 php

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra本教学将使用纯 php 去备份资料库并下载到目录底下$ crontab -e设定每天凌晨00:00 执行0 0 * * * php /var/www/backup.phpbackup.php 脚本记得开头一定要 「<?php」,即便你有启用缩写header(‘Content-Type: text/html; charset=utf-8’);function backup_mysql_database($options){$mtables = array(); $contents = “– Database: ".$options['db_to_backup']." –\n”;$mysqli = new mysqli($options[‘db_host’], $options[‘db_uname’], $options[‘db_password’], $options[‘db_to_backup’]);if ($mysqli->connect_error) { die(‘Error : (’. $mysqli->connect_errno .’) ‘. $mysqli->connect_error);}$mysqli->query(“SET NAMES utf8”);$mysqli->set_charset(“utf8mb4”);$results = $mysqli->query(“SHOW TABLES”);while ($row = $results->fetch_array()){ if (!in_array($row[0], $options[‘db_exclude_tables’])){ $mtables[] = $row[0]; }}foreach($mtables as $table){ $contents .= “– Table ".$table." –\n”; $results = $mysqli->query(“SHOW CREATE TABLE “.$table); while ($row = $results->fetch_array()){ $contents .= $row[1].”;\n\n”; } $results = $mysqli->query(“SELECT * FROM “.$table); $row_count = $results->num_rows; $fields = $results->fetch_fields(); $fields_count = count($fields); $insert_head = “INSERT INTO ".$table." (”; for($i=0; $i < $fields_count; $i++){ $insert_head .= “".$fields[$i]-&gt;name."”; if($i < $fields_count-1){ $insert_head .= ‘, ‘; } } $insert_head .= “)”; $insert_head .= " VALUES\n”; if($row_count>0){ $r = 0; while ($row = $results->fetch_array()){ if(($r % 400) == 0){ $contents .= $insert_head; } $contents .= “(”; for($i=0; $i < $fields_count; $i++){ $row_content = str_replace("\n”,"\n",$mysqli->real_escape_string($row[$i])); switch($fields[$i]->type){ case 8: case 3: $contents .= $row_content; break; default: $contents .= “’”. $row_content ."’"; } if($i < $fields_count-1){ $contents .= ‘, ‘; } } if(($r+1) == $row_count || ($r % 400) == 399){ $contents .= “);\n\n”; } else { $contents .= “),\n”; } $r++; } }}if (!is_dir ( $options[‘db_backup_path’] )) { mkdir ( $options[‘db_backup_path’], 0777, true ); }## 备份后的 sql 名称$backup_file_name = “dev-” . date( “Y-m-d H:i:s”).".sql";$fp = fopen($options[‘db_backup_path’] . ‘/’ . $backup_file_name ,‘w+’);if (($result = fwrite($fp, $contents))) { // echo “Backup file created ‘$backup_file_name’ ($result)”;}fclose($fp);return $backup_file_name;}## 资料库设定$options = array( ‘db_host’=> ’localhost’, ‘db_uname’ => ‘root’, // 资料库使用者帐号 ‘db_password’ => ‘password’, // 资料库密码 ‘db_to_backup’ => ‘db’, // 资料库名称 ‘db_backup_path’ => ‘/var/www/’, // 保存到哪个路径 ‘db_exclude_tables’ => array());$backup_file_name=backup_mysql_database($options);这样就可以透过 php 备份到该主机下,直接产生 sql 档了。Line ID:ianmacQQ:1258554508 ...

April 13, 2019 · 2 min · jiezi

透过 Crontab 排程备份 Mariadb (Mysql)使用 php + exec + mysqldump + gzip

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra一开始原本是用 php 去备份资料库,但是发现会有一些问题,于是改成这种方式,直接透过 mysql 去备份,出来的格式也不会有什么问题。$ crontab -e设定每天凌晨00:00 执行0 0 * * * php /var/www/backup.phpbackup.php 脚本记得开头一定要 「<?php」,即便你有启用缩写<?php// 设定环境header(‘Content-Type: text/html; charset=utf-8’);date_default_timezone_set(‘Asia/Taipei’);// 设定保存的资料夹位置$dir = “/var/www/db/”;// 设定档名$filename = “dev-” . date(“Y-m-d-H-i-s”) . “.sql.gz”;// 设定资料库$db_host = “localhost”;$db_username = “root”;$db_password = “password”;$db_database = “db”;// 准备 cmd$cmd = “mysqldump -h {$db_host} -u {$db_username} –password={$db_password} {$db_database} | gzip > {$dir}{$filename}”;// 执行 cmdexec($cmd);header(“Content-type: application/octet-stream”);header(“Content-Disposition: attachment; filename="$filename"”);passthru(“cat {$dir}{$filename}”);?>输出时会经过 gzip 解压缩实验过原本 150MB 的 sql 压缩后为 28MBLine ID:ianmacQQ:1258554508 ...

April 13, 2019 · 1 min · jiezi

在Ubuntu18.04服务器安装Apache2.4/MariaDB10.3/PHP7.2

在这篇文章中,我们将分享在最新Ubuntu18.04系统镜像中安装LAMP常规的软件环境。其中软件包括Apache2.4/MariaDB10.3/PHP7.2,这里我们看到不安装MYSQL而是用MariaDB数据库代替,因为根据部分网友反馈和实际的应用发现MariaDB相比MYSQL部分性能还是优秀的。只不过我们对于MYSQL有先知优势而已。在Ubuntu18.04默认包中其实是已经集成PHP7.2的,这样我们直接可以从源中编译不需要单独安装,有网友可能要说目前最新PHP版本是7.3,为什么我们不去安装?一般我们会安装次版本,因为最新版本一来兼容问题,二来担心有BUG。第一、更新源至最新软件版本apt-get update -yapt-get upgrade -y无论我们拿到上面版本的镜像,肯定需要进行更新软件。因为有些商家是老版本的源,可能存在漏洞补丁没有更新。第二、安装Apache 2.4apt-get install apache2 -y安装完毕之后,我们可以通过apache2 -v命令检测当前版本。出于安全的考虑,以及我们后续安装网站,需要禁止默认根目录执行。mv /var/www/html/index.html /var/www/html/index.html.bak移除默认根目录欢迎页面。且出于安全的考虑,我们需要禁止 /var/www/html 目录给访问者。cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.baksed -i “s/Options Indexes FollowSymLinks/Options FollowSymLinks/” /etc/apache2/apache2.conf最后我们需要重启生效。systemctl start apache2.servicesystemctl enable apache2.service这样我们的Apache安装完毕。第三、安装MariaDB 10.3数据库apt-get install software-properties-common首先我们需要安装软件。apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8add-apt-repository ‘deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main’导入库。apt update -yapt install -y mariadb-server mariadb-client更新和安装。完毕之后我们可以mysql -v检测版本。systemctl start mariadb.servicesystemctl enable mariadb.service在设置数据库之后我们还需要设置数据库安全。这个其实与MYSQL安装后设置相似。/usr/bin/mysql_secure_installation根据需要设置n或者ENTER回车设置。重置数据库密码等。第四、创建数据库用户mysql -u root -p用我们设置的密码登录,然后创建用户。根据我们的需要创建vultrla数据库,vultrlauer用户,以及vultrla.com密码。CREATE DATABASE vultrla;CREATE USER ‘vultrlauer’@’localhost’ IDENTIFIED BY ‘vultrla.com’;GRANT ALL PRIVILEGES ON vultrla.* TO ‘vultrlauer’@’localhost’ IDENTIFIED BY ‘vultrla.com’ WITH GRANT OPTION;FLUSH PRIVILEGES;EXIT;用户和密码根据我们实际需要设置。如果有需要我们可以通过查看文件数据库配置。cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bakvi /etc/mysql/my.cnf启动生效。systemctl restart mariadb.service第五、安装PHP7.2apt-get install -y php libapache2-mod-php7.2 php7.2-cli php7.2-common php7.2-mbstring php7.2-gd php7.2-intl php7.2-xml php7.2-mysql php7.2-zip这里我们直接丢上命令安装系统自带的有PHP7.2的源安装,以及对于数据库的扩展内容。这样,在安装完毕之后,我们可在Ubuntu 18.04中安装完毕LAMP,且软件都是比较新的。本文原创来自:https://www.vultrla.com/315.html ...

March 26, 2019 · 1 min · jiezi

mariadb 内存占用优化

本文由云+社区发表作者:工程师小熊摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariadb进行调优。查询最高内存占用使用以下命令可以知道mysql的配置使用多少 RAMSELECT ( @@key_buffer_size+ @@query_cache_size+ @@innodb_buffer_pool_size+ @@innodb_additional_mem_pool_size+ @@innodb_log_buffer_size+ @@max_connections * ( @@read_buffer_size+ @@read_rnd_buffer_size+ @@sort_buffer_size+ @@join_buffer_size+ @@binlog_cache_size+ @@thread_stack+ @@tmp_table_size)) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;可以使用mysql计算器来计算内存使用下面是理论,可以直接到推荐配置如何调整配置key_buffer_size(MyISAM索引用)指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。为了最小化磁盘的 I/O , MyISAM 存储引擎的表使用键高速缓存来缓存索引,这个键高速缓存的大小则通过 key-buffer-size 参数来设置。如果应用系统中使用的表以 MyISAM 存储引擎为主,则应该适当增加该参数的值,以便尽可能的缓存索引,提高访问的速度。怎么设show global status like ‘key_read%’;+————————+————-+| Variable_name | Value |+————————+————-+| Key_read_requests | 27813678764 || Key_reads | 6798830 |——————— key_buffer_size通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好。show global status like ‘%created_tmp_disk_tables%’;key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)另一个参考如下show global status like ‘key_blocks_u%’;+————————+————-+| Variable_name | Value |+————————+————-+| Key_blocks_unused | 0 || Key_blocks_used | 413543 |+————————+————-+Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:可以根据此工式来动态的调整Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%show engines;查询存储引擎innodb_buffer_pool_size (innodb索引用)这个参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。 该参数分配内存的原则:这个参数默认分配只有8M,可以说是非常小的一个值。如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的50%,这个参数不能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的查询特慢。如果是非专用DB服务器,可以先尝试设置成内存的1/4,如果有问题再调整query_cache_size(查询缓存)缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表的使用MERGE表的查询。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同sql查询的表,查询缓存会节约很大的性能。注意:如果你查询的表更新比较频繁,而且很少有相同的查询,最好不要使用查询缓存。因为这样会消耗很大的系统性能还没有任何的效果要不要打开?先设置成这样跑一段时间query_cache_size=128M query_cache_type=1 看看命中结果来进行进一步的判断mysql> show status like ‘%Qcache%’;+————————-+———–+| Variable_name | Value |+————————-+———–+| Qcache_free_blocks | 669 || Qcache_free_memory | 132519160 || Qcache_hits | 1158 || Qcache_inserts | 284824 || Qcache_lowmem_prunes | 2741 || Qcache_not_cached | 1755767 || Qcache_queries_in_cache | 579 || Qcache_total_blocks | 1853 |+————————-+———–+8 rows in set (0.00 sec)Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。Qcache_queries_in_cache:当前缓存中缓存的查询数量。Qcache_total_blocks:当前缓存的block数量。我们可以看到现网命中1158,未缓存的有1755767次,说明我们这个系统命中的太少了,表变动比较多,不什么开启这个功能涉及参数query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cachequery_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小query_cache_size:设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数query_cache_type:控制 Query Cache 功能的开关,可以设置为0(OFF),1(ON)和2(DEMAND)三种,意义分别如下: 0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache 1(ON):开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用Query Cache 2(DEMAND):开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cachequery_cache_wlock_invalidate:控制当有写锁定发生在表上的时刻是否先失效该表相关的 Query Cache,如果设置为 1(TRUE),则在写锁定的同时将失效该表相关的所有 Query Cache,如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的 Query Cache。innodb_additional_mem_pool_size(InnoDB内部目录大小)InnoDB 字典信息缓存主要用来存放 InnoDB 存储引擎的字典信息以及一些 internal 的共享数据结构信息,也就是存放Innodb的内部目录,所以其大小也与系统中所使用的 InnoDB 存储引擎表的数量有较大关系。这个值不用分配太大,通常设置16M够用了,默认8M,如果设置的内存大小不够,InnoDB 会自动申请更多的内存,并在 MySQL 的 Error Log 中记录警告信息。innodb_log_buffer_size (日志缓冲)表示InnoDB写入到磁盘上的日志文件时使用的缓冲区的字节数,默认值为16M。一个大的日志缓冲区允许大量的事务在提交之前不用写日志到磁盘,所以如果有更新,插入或删除许多行的事务,则使日志缓冲区更大一些可以节省磁盘IO通常最大设为64M足够max_connections (最大并发连接)MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100。这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;该参数设置过小的最明显特征是出现”Too many connections”错误mysql> show variables like ‘%max_connect%’;+———————–+——-+| Variable_name | Value |+———————–+——-+| extra_max_connections | 1 || max_connect_errors | 100 || max_connections | 2048 |+———————–+——-+3 rows in set (0.00 sec)mysql> show status like ‘Threads%’;+——————-+———+| Variable_name | Value |+——————-+———+| Threads_cached | 0 || Threads_connected | 1 || Threads_created | 9626717 || Threads_running | 1 |+——————-+———+4 rows in set (0.00 sec)可以看到此时的并发数也就是Threads_connected=1,还远远达不到2048mysql> show variables like ‘open_files_limit’;+——————+——-+| Variable_name | Value |+——————+——-+| open_files_limit | 65535 |+——————+——-+1 row in set (0.00 sec)max_connections 还取决于操作系统对单进程允许打开最大文件数的限制也就是说如果操作系统限制单个进程最大可以打开100个文件那么 max_connections 设置为200也没什么用MySQL 的 open_files_limit 参数值是在MySQL启动时记录的操作系统对单进程打开最大文件数限制的值可以使用 show variables like ‘open_files_limit’; 查看 open_files_limit 值ulimit -n65535或者直接在 Linux 下通过ulimit -n命令查看操作系统对单进程打开最大文件数限制 ( 默认为1024 )connection级内存参数(线程独享)connection级参数,是在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存。排序性能mysql对于排序,使用了两个变量来控制sort_buffer_size和 max_length_for_sort_data, 不象oracle使用SGA控制. 这种方式的缺点是要单独控制,容易出现排序性能问题.mysql> SHOW GLOBAL STATUS like ‘%sort%’;+—————————+——–+| Variable_name | Value |+—————————+——–+| Sort_merge_passes | 0 || Sort_priority_queue_sorts | 1409 || Sort_range | 0 || Sort_rows | 843479 || Sort_scan | 13053 |+—————————+——–+5 rows in set (0.00 sec)如果发现Sort_merge_passes的值比较大,你可以考虑增加sort_buffer_size 来加速ORDER BY 或者GROUP BY 操作,不能通过查询或者索引优化的。我们这为0,那就没必要设置那么大。读取缓存read_buffer_size = 128K(默认128K)为需要全表扫描的MYISAM数据表线程指定缓存read_rnd_buffer_size = 4M:(默认256K)首先,该变量可以被任何存储引擎使用,当从一个已经排序的键值表中读取行时,会先从该缓冲区中获取而不再从磁盘上获取。大事务binlogmysql> show global status like ‘binlog_cache%’;+———————–+———-+| Variable_name | Value |+———————–+———-+| Binlog_cache_disk_use | 220840 || Binlog_cache_use | 67604667 |+———————–+———-+2 rows in set (0.00 sec)Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数Binlog_cache_use 表示 用binlog_cache_size缓存的次数当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值如上图,现网是32K,我们加到64Kjoin语句内存影响如果应用中,很少出现join语句,则可以不用太在乎join_buffer_size参数的设置大小。如果join语句不是很少的话,个人建议可以适当增大join_buffer_size到1MB左右,如果内存充足可以设置为2MB。线程内存影响Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。当MySQL创建一个新的连接线程时,需要给它分配一定大小的内存堆栈空间,以便存放客户端的请求的Query及自身的各种状态和处理信息。mysql> show status like ‘%threads%’;+————————-+———+| Variable_name | Value |+————————-+———+| Delayed_insert_threads | 0 || Slow_launch_threads | 0 || Threadpool_idle_threads | 0 || Threadpool_threads | 0 || Threads_cached | 0 || Threads_connected | 1 || Threads_created | 9649301 || Threads_running | 1 |+————————-+———+8 rows in set (0.00 sec)mysql> show status like ‘connections’;+—————+———+| Variable_name | Value |+—————+———+| Connections | 9649311 |+—————+———+1 row in set (0.00 sec)如上:系统启动到现在共接受到客户端的连接9649311次,共创建了9649301个连接线程,当前有1个连接线程处于和客户端连接的状态。而在Thread Cache池中共缓存了0个连接线程(Threads_cached)。Thread Cache 命中率:Thread_Cache_Hit = (Connections - Threads_created) / Connections * 100%;一般在系统稳定运行一段时间后,Thread Cache命中率应该保持在90%左右才算正常。内存临时表tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定 max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。Order By 或者Group By操作多的话,加大这两个值,默认16Mmysql> show status like ‘Created_tmp_%’;+————————-+——-+| Variable_name | Value |+————————-+——-+| Created_tmp_disk_tables | 0 || Created_tmp_files | 626 || Created_tmp_tables | 3 |+————————-+——-+3 rows in set (0.00 sec)如上图,写入硬盘的为0,3次中间表,说明我们的默认值足够用了mariadb 推荐配置注意这里只推荐innodb引擎内存配置只关注有注释的行[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockdefault-storage-engine=INNODBcharacter-set-server=utf8collation-server=utf8_general_ciuser=mysqlsymbolic-links=0# global settingstable_cache=65535table_definition_cache=65535max_allowed_packet=4Mnet_buffer_length=1Mbulk_insert_buffer_size=16Mquery_cache_type=0 #是否使用查询缓冲,0关闭query_cache_size=0 #0关闭,因为改表操作多,命中低,开启消耗cpu# sharedkey_buffer_size=8M #保持8M MyISAM索引用innodb_buffer_pool_size=4G #DB专用mem50%,非DB专用mem15%到25%myisam_sort_buffer_size=32Mmax_heap_table_size=16M #最大中间表大小tmp_table_size=16M #中间表大小# per-threadsort_buffer_size=256K #加速排序缓存大小read_buffer_size=128k #为需要全表扫描的MYISAM数据表线程指定缓存read_rnd_buffer_size=4M #已排序的表读取时缓存,如果比较大内存就到6Mjoin_buffer_size=1M #join语句多时加大,1-2Mthread_stack=256k #线程空间,256K or 512Kbinlog_cache_size=64K #大事务binlog# big-tablesinnodb_file_per_table = 1skip-external-lockingmax_connections=2048 #最大连接数skip-name-resolve# slow_query_logslow_query_log_file = /var/log/mysql-slow.loglong_query_time = 30group_concat_max_len=65536# according to tuning-primer.shthread_cache_size = 8thread_concurrency = 16# set variablesconcurrent_insert=2运行时修改使用以下命令来修改变量set global {要改的key} = {值}; (立即生效重启后失效)set @@{要改的key} = {值}; (立即生效重启后失效)set @@global.{要改的key} = {值}; (立即生效重启后失效)试验mysql> set @@global.innodb_buffer_pool_size=4294967296;ERROR 1238 (HY000): Variable ‘innodb_buffer_pool_size’ is a read only variablemysql> set @@global.thread_stack=262144;ERROR 1238 (HY000): Variable ’thread_stack’ is a read only variablemysql> set @@global.binlog_cache_size=65536;Query OK, 0 rows affected (0.00 sec)mysql> set @@join_buffer_size=1048576;Query OK, 0 rows affected (0.00 sec)mysql> set @@read_rnd_buffer_size=4194304;Query OK, 0 rows affected (0.00 sec)mysql> set @@sort_buffer_size=262144;Query OK, 0 rows affected (0.00 sec)mysql> set @@read_buffer_size=131072;Query OK, 0 rows affected (0.00 sec)mysql> set global key_buffer_size=8388608;Query OK, 0 rows affected (0.39 sec)我们可以看到innodb_buffer_pool_size和thread_stack报错了,他们只能改配置文件,在运行时是只读的。 以下直接复制使用set @@global.binlog_cache_size=65536;set @@join_buffer_size=1048576;set @@read_rnd_buffer_size=4194304;set @@sort_buffer_size=262144;set @@read_buffer_size=131072;set global key_buffer_size=8388608;引用记一次Mysql占用内存过高的优化过程mysql 优化技巧心得一(key_buffer_size设置)mysql内存计算mysql计算器mariadb官网此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

January 23, 2019 · 3 min · jiezi

MariaDB数据库用户创建/删除及权限授权撤回

1.MariaDB数据库创建用户1.1 命令CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;1.2 参数username:(jack) 创建的用户名host:(192.168.13.34) 指定该用户在哪个主机上可以登陆, 如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:(jack) 建议用户名和密码不要一致,上述只是为了演示 该用户的登陆密码,密码可以为空, 如果为空则该用户可以不需要密码登陆服务器.1.3 示例# 创建用户‘Ann’MariaDB [(none)]> create user ann@localhost identified by ‘ann’# 创建用户‘Steven’MariaDB [(none)]> create user ann@localhost identified by ‘ann’# 创建用户‘Jack’MariaDB [mysql]> create user jack@‘192.168.13.34’ identified by ‘jack’;2.MariaDB数据库给用户授权2.1 命令GRANT privileges ON databasename.tablename TO ‘username’@‘host'2.2 参数privileges: 用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL.databasename: 数据库名tablename: 表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如..2.3 示例# 授权Ann拥有db1数据库的所有权限,允许在localhost登录MariaDB [(none)]> grant select on db1. to ann@localhost;MariaDB [mysql]> flush privileges;# 授权Jack拥有db1数据库的所有权限,允许在192.168.13.34登录MariaDB [(none)]> grant all on db1.* to jack@‘192.168.13.34’;MariaDB [mysql]> flush privileges;# 授权Steven拥有db1数据库的所有权限,允许从任意远程主机登陆,# 注意你授权时用%,你创建用户时,必须也是%,要对应,否则报错.MariaDB [(none)]> grant all on . to steven@’%’;MariaDB [mysql]> flush privileges;3.MariaDB数据库创建用户并授权的命令3.1 授权apollo用户拥有db1数据库的所有权限MariaDB [mysql]> grant all on . to john@‘192.168.13.34’ identified by ‘john’;MariaDB [mysql]> flush privileges;3.2 授予外网登陆权限MariaDB [mysql]> grant all privileges on . to username@’%’ identified by ‘password’;3.3 授予权限并且可以授权MariaDB [mysql]>grant all privileges on . to username@‘hostname’ identified by ‘password’ with grant option;# 整个命令是一句话,这里换行是因为显示问题.授权部分参数值:all privileges,allselect,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file4.MariaDB数据库查看用户4.1 MariaDB查看当前登录用户# 方法1MariaDB [(none)]> select user();# 方法2MariaDB [(none)]> select current_user;# 方法3MariaDB [(none)]> select current_user();4.2 MariaDB中如何显示所有用户?MariaDB [(none)]> select User,Host,Password from mysql.user;4.3 MariaDB显示所有的用户(不重复)MariaDB [mysql]> select distinct user from mysql.user;5.MariaDB数据库删除用户# 5.1 删除用户’jack’MariaDB [mysql]> delete from user where user=‘jack’;# 5.2 删除用户’steven’MariaDB [(none)]> delete from mysql.user where user=‘steven’ and host=’%’;# 5.3 删除用户’john’MariaDB [(none)]> drop user ‘john’@‘192.168.13.34’;6.MariaDB数据库撤销用户权限6.1 命令REVOKE privileges ON databasename.tablename FROM ‘username’@‘host’;6.2参数privileges: 用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL.databasename: 数据库名tablename: 表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如..6.3 示例# 假如你在给用户授权的时候是这样的:grant select on db1.user to jack@’%’;# 执行下面sql语句revoke select on . from jack@’%’;# 并不能撤销该用户对db1数据库中user表的SELECT操作.# 假如你在给用户授权的时候是这样的:grant select on . to jack@’%’;# 执行下面sql语句revoke select on db1.user from jack@’%’;# 并不能撤销该用户对db1数据库中user表的SELECT操作.6.4 查看授权信息MariaDB [(none)]> show grants for ‘jack’@‘192.168.13.34’;6.5 撤销用户Jack所有权限revoke ALL PRIVILEGES ON db1. from ‘jack’@‘192.168.13.34’ ...

January 20, 2019 · 2 min · jiezi

Debian9(Stretch) 下编译安装LNMP环境

Debian9下源码安装LNMP一、前言之前,我的开发环境是Windows-10+PHP-7.1+Nginx-1.10+MariaDB-10.1。后面开发需要使用到memcached,redis等nosql比较多,而在Windows下定制难度,很多PHP拓展并没有.dll文件,且PHP拓展在Windows下compile难度还是比较大的。所以促使我转向Linux下开发。首先,我search了一下,主要是Red Hat 与Debian。基于Red Hat:商业版,Centos,Fedora基于Debian: Debian,Ubuntu我选择了Debian 9,PHP-7.2,MariaDB-10.2,Nginx-1.13二、Requirements一般安装顺序,mariadb > nginx > php,以下的涉及的软件,库名均是基于Debian(Ubuntu)。2.1 PHP的需要的额外库:## 源码需要的词法分析器apt install bison## 源码都是c程序,需要c编译器,注意编译器版本apt install gcc-6## C++编译器apt install g++## xml解析库apt install libxml2 libxml2-dev## make cmake m4 autoconfapt install make cmake m4 autoconf## webp 格式,能够带来更小体积的图片apt install libwebp6 libwebp-dev## jpeg格式支持apt install libjpeg-dev## png格式支持apt install libpng-dev## 免费开源字体引擎apt install libfreetype6 libfreetype6-dev## ssl加密库支持(源码安装openssl,可以选择使用Debian 包来安装openssl)apt install openssl## ssh2 库(源码安装)apt install libssh2-1-dev## mhash 库apt install libmhash2## zlib 压缩库(源码安装)apt install zlib1g zlib1g-dev## pcre 正则表达式库(源码安装)apt install libpcre3-dev libpcre3## gzipapt install gzip## bz2apt install libbz2-1.0 libbz2-dev## soduim php7.2新特性 现代加密标准apt install libsodium-dev## argon2 php7.2新特性 新的加密函数,由PHC(Password Hashing Competition)发布apt install argon2 libargon2-0 libargon2-0-dev2.2 Nginx 需要的额外库主要是三个,openssl,zlib,pcre,可以通过Debian本身的库安装,也可以选择源码安装。我选择后者,所以,并不会与上面的冲突,后面会涉及到原因。2.3 MariaDB 需要的额外库## bison词法分析器apt install bison## libncurses 一个可用于编写独立终端基于文本的的程序库apt install libncurses5 libncurses5-dev## libevent-dev 一个事件库apt install libevent-dev## openssl 一个加密库apt install openssl三、 安装过程按照MariaDB > Nginx > PHP的顺序安装,安装前请再次检查上述所需的额外库都已安装。3.1 对应的系统用户创建为什么要创建用户? 答:因为安装完成后,我们只需要这些程序只用于系统服务就好(daemon或者其他自己运行的进程),并不需要使用一个具体用户身份去操作他。即创建系统账户,以及系统用户组。groupadd -r mysqluseradd -r -g mysql -s /bin/false -M mysqlmkdir /usr/local/data/mysqlchown -R mysql:mysql /usr/local/data/mysql note 参数含义通过man groupadd 或者man useradd 可以调出具体的手册-r 创建系统用户或者用户组-g 指定用户所属用户组-s 指定用户登录shell名字,sh,bash,因为是系统用户,并不需要,设置 /bin/false或者/usr/sbin/nologin-M 不创建用户主目录同样,分别创建nginx,php-fpmgroupadd -r php-fpmuseradd -r -g php-fpm -s /bin/false -M php-fpmgroupadd -r nginxuseradd -r -g nginx -s /bin/false -M nginx 3.2 MariaDBMariaDB 安装可能略显麻烦,并不是常见的make方式,而是cmake方式。获取mariadb-10.2源码wget http://mirror.jaleco.com/mariadb//mariadb-10.2.12/source/mariadb-10.2.12.tar.gz tar -zxvf mariadb-10.2.12.tar.gzmkdir build-mariadbcd build-mariadbcmake ../ -DCMAKE_INSTALL_PREFIX=/opt/soft/mariadb-10.3.4 -DMYSQL_DATADIR=/var/data/mysql -DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DBUILD_LIBPROTOBUF_FROM_SOURCES=ONmake && make install 如果失败 使用 rm -rf CMakeCache.txt3.2.1 配置MariaDBvim /etc/profile.d/mariadb.shaddexport PATH=$PATH:/opt/soft/mariadb-10.2/binsource /etc/profile.d/mariadb.shcd /opt/soft/mariadb-10.2scripts/mysql_install_db –user=mysql –datadir=/usr/local/data/mysql成功输出信息:Installing MariaDB/MySQL system tables in ‘/data/mysql’ …OKTo start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !To do so, start the server, then issue the following commands:’./bin/mysqladmin’ -u root password ’new-password’’./bin/mysqladmin’ -u root -h localhost.localdomain password ’new-password’Alternatively you can run:’./bin/mysql_secure_installation’which will also give you the option of removing the testdatabases and anonymous user created by default. This isstrongly recommended for production servers.See the MariaDB Knowledgebase at http://mariadb.com/kb or theMySQL manual for more instructions.You can start the MariaDB daemon with:cd ‘.’ ; ./bin/mysqld_safe –datadir=’/data/maria’You can test the MariaDB daemon with mysql-test-run.plcd ‘./mysql-test’ ; perl mysql-test-run.plPlease report any problems at http://mariadb.org/jiraThe latest information about MariaDB is available at http://mariadb.org/.You can find additional information about the MySQL part at:http://dev.mysql.comConsider joining MariaDB’s strong and vibrant community:https://mariadb.org/get-involved/复制cd /opt/soft/mariadb-10.2cp support-files/my-large.cnf /etc/my.cnf或者cp support-files/my-large.cnf /etc/mysql/my.cnf创建系统启动脚本(使用systemd)cd /etc/systemd/systemvim mysqld.service [Unit]Description=MariaDB ServerAfter=network.target[Service]ExecStart=/opt/soft/mariadb-10.2/bin/mysqld –defaults-file=/etc/mysql/my.cnf –datadir=/usr/local/data/mysql –socket=/tmp/mysql.sockUser=mysqlGroup=mysqlWorkingDirectory=/opt/soft/mariadb-10.2[Install]WantedBy=multi-user.targetsystemctl daemon-reloadsystemctl restart mysqld.servicesystemctl status mysqld.servie 如果没有启动,请使用journalctl -xn 或者 journalctl -xl来查看错误信息如果想开机启动,请使用systemctl enable mysqld.service安全设置$:mysql_secure_installation Enter current password for root (enter for none): 输入当前root密码(没有输入)Set root password? [Y/n] 设置root密码?(是/否)New password: 输入新root密码Re-enter new password: 确认输入root密码Password updated successfully! 密码更新成功By default, a MariaDB installation has an anonymous user, allowing anyoneto log into MariaDB without having to have a user account created forthem. This is intended only for testing, and to make the installationgo a bit smoother. You should remove them before moving into aproduction environment.默认情况下,MariaDB安装有一个匿名用户,允许任何人登录MariaDB而他们无需创建用户帐户。这个目的是只用于测试,安装去更平缓一些。你应该进入前删除它们生产环境。Remove anonymous users? [Y/n] 删除匿名用户?(是/否)Normally, root should only be allowed to connect from ’localhost’. Thisensures that someone cannot guess at the root password from the network.通常情况下,root只应允许从localhost连接。这确保其他用户无法从网络猜测root密码。Disallow root login remotely? [Y/n] 不允许root登录远程?(是/否)By default, MariaDB comes with a database named ’test’ that anyone canaccess. This is also intended only for testing, and should be removedbefore moving into a production environment.默认情况下,MariaDB提供了一个名为“测试”的数据库,任何人都可以访问。这也只用于测试,在进入生产环境之前应该被删除。Reloading the privilege tables will ensure that all changes made so farwill take effect immediately.重新加载权限表将确保所有到目前为止所做的更改将立即生效。Reload privilege tables now? [Y/n] 现在重新加载权限表(是/否)All done! If you’ve completed all of the above steps, your MariaDBinstallation should now be secure.全部完成!如果你已经完成了以上步骤,MariaDB安装现在应该安全。Thanks for using MariaDB!至此,mariaddb已经安装完成,可以使用 ps -aux | grep mysql 查看服务现在测试一下,mysql -u root -p 或者 mysql -h localhost -P 5001 -u shanechiu -p 3.3 PHP 安装PHP 安装比较简单,主要是选择你要安装的拓展或者需要开启的功能可以使用./configure –help 来浏览源码安装提供的安装选项有些属于PHP内置的功能,你只需要 enable或者disable,比如php-fpm,是需要启用的。有些拓展是可以动态加载的,称之为shared extension,但是官方也说了,并不是所有的拓展都是能够shared.获取源码:wget http://am1.php.net/distributions/php-7.2.1.tar.bz2解压:tar -xvf php-7.2.1.tar.bz2cd php-7.2.1./configure –prefix=/opt/soft/php7.2 --with-config-file-path=/opt/soft/php7.2/etc --with-mysql-sock=/tmp/mysql.sock --with-openssl --with-mhash --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-pdo-pgsql=/opt/soft/pgsql --with-gd --with-iconv --with-zlib --enable-exif --enable-intl --enable-calendar --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-mbregex --enable-mbstring --enable-ftp --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-sockets --enable-ipv6 --with-bz2 --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl=/opt/soft/curl7.57–enable-debug --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-opcache --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-sodium --with-libxml-dir --with-password-argon2 --without-gdbm --with-pcre-regex --with-pcre-jit --enable-fast-install --enable-fileinfo配置进入源码文件,cp php.ini.development /opt/soft/php-7.2/php.ini修改以下部分extension_dir=/opt/soft/php-7.2/lib/php/extensions/no-debug-non-zts-20170718/extension=mysqlitime_zone=PRC同时要添加php-fpm配置文件,安装目录下 etc/ 下 cp php-fpm.conf.default php-fpm.conf 和 cp php.conf.d/www.conf.default php.conf.d/www.confPHP-FPM启动脚本(systemd)PHP 非常人性化,在源码目录下/sapi/fpm下可以找到php-fpm.service文件,复制到/etc/systemd/system/php-fpm.service中systemdctl start php-fpm.servicesystemdctl status php-fpm.service如果发生错误,使用journalctl -xn查看具体错误信息开机启动,sytemctl enable php-fpm.service3.4 Nginx 源码安装Nginx的编译安装难易程度应该是LNMP环境中最简单的首先需要三个源码包,一个zlib(压缩库),一个pcre(正则表达式库),一个openssl(加密库,如果要使用HTTPS,这个库是必须的),当然你如果是通过debian本身的包管理器安装的,这个可以省略,但是一定要安装两个,一个是软件本身,同时还要安装开发库,像这种,apt -y install openssl opensll-dev。命令:–configure –prefix=/opt/soft/nginx --user=nginx --group=nginx --with-http_ssl_module \ # 这个默认是不开启的,如需使用TLS,请带上这一项编译。–with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.0g 然后,make 和 make install注意,如果是使用二进制包安装了zlib,pcre,openssl,及相应的开发库,不需要指定路径。配置:编写nginx守护进程文件,还是利用systemd工具vim /etc/sytemd/system/nginx.service[Unit]Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/opt/soft/nginx/logs/nginx.pidExecStartPre=/opt/soft/nginx/sbin/nginx -tExecStart=/opt/soft/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target这个可以在nginx 官网找到,可以按照自己需求修改。注意路径修改成自己的安装路径。systemctl start nginx.service 启动Nginxsystemctl enable nginx.service 开机启动记得,如果中途修改了service文件,一定要先运行systemctl daemon-reload重新加载守护进程文件。然后运行 systemctl start nginx.service重启服务。四、APPEND后续会添加一键安装脚本。五、参考资料systemd 入门教程CentOS7.3编译安装MariaDB10.2.6CentOS7.3编译安装php7.1GNU bisonGD-support configure PHPArgon2The Sodium crypto library (libsodium)")get the mariadb code,buildit,test itGeneric Build InstructionsInstalling System Tables (mysql_install_db)")“Compiling MariaDB From Source"ncursesCMakephp-manulPHP7.2 NEW FEATUREBuilding nginx from Sources ...

November 9, 2018 · 4 min · jiezi