-
一、前言 linux安装mysql服务分四种安装方法: 源码安装:优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错。 使用官方编译好的二进制文件安装:优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。 yum安装。 rpm安装。 二、安装方法一:源码安装/编译安装 请看我的另一篇文章:mysql源码脚本安装 三、安装方法二(通用二进制包):mysql-x.x.xx-linux-glibcx.x-xxx.tar.gz 1.Redhat5.5 32/RedHat6.6和6.5 64位/Centos7.2 64位位下安装mysql 5.6.35: (1)进入安装包所在目录: [root@localhost ~]# cd /usr/local [root@localhost local]# tar -zxvf mysql-5.6.35-linux-glibc2.5-i686.tar.gz [root@localhost local]# rm -rf mysql-5.6.35-linux-glibc2.5-i686.tar.gz [root@localhost local]# mv mysql-5.6.35-linux-glibc2.5-i686/ mysql (2)添加系统mysql组和mysql用户: [root@localhost local]# groupadd mysql [root@localhost local]# useradd -r -g mysql mysql (3)修改当前目录拥有者为mysql用户: [root@localhost local]# cd mysql/ [root@localhost mysql]# chown -R mysql:mysql ./ (4)安装数据库: [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql 注:在RedHat6.6和6.5 64位安装时遇到了这些问题: [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql sh: ./bin/my_print_defaults: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory FATAL ERROR: Neither host 'h149' nor 'localhost' could be looked up with ./bin/resolveip Please configure the 'hostname' command to return a correct hostname. If you want to solve this at a later stage, restart this script with the --force option 网上有的说是版本的原因,mysql是32位的,而系统是64位。可是我后来在64位上也安装成功了啊 解决:yum -y install ld-linux.so.2 libaio.so.1 libstdc++.so.6 libncurses.so.5 补充:Linux 下查看系统是32位 还是64 位的方法: [root@localhost ~]# uname -a (RedHat6.6 64位) Linux localhost.localdomain 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# uname -a (RedHat5.5 32位) Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:43 EDT 2010 i686 i686 i386 GNU/Linux 注:Centos7.2 64位这步遇到的问题 [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql -bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory 解决:[root@localhost mysql]# yum -y install perl autoconf ld-linux.so.2 libstdc++* libstdc++.so.6 libaio.so.1 libncurses.so.5 (5)修改当前目录拥有者为root用户: [root@localhost mysql]# chown -R root:root ./ (6)修改当前data目录拥有者为mysql用户: [root@localhost mysql]# chown -R mysql:mysql data (这些赋权限的也不知道有啥用,我后来试了一下,即使都没给他们赋权最后mysql也安装成功了,但为了怕以后有什么问题,还是都按步骤来吧) (7)添加开机启动: [root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql (8)启动mysql服务: [root@localhost mysql]# service mysql start 注:Centos7.2 64位这步遇到的问题 [root@localhost mysql]# service mysql start Starting MySQL.170810 19:43:05 mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid). 解决:修改/etc/my.cnf中的这两行为 [root@localhost mysql]# vi /etc/my.cnf log-error=/var/log/mysql/mysql.log pid-file=/var/run/mysql/mysql.pid 执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功。 (9)修改mysql的root用户密码,root初始密码为空: [root@localhost mysql]# ./bin/mysqladmin -u root password '123456' Warning: Using a password on the command line interface can be insecure. (翻译过来是:在命令行界面上使用密码是不安全的) 注:RedHat6.6和6.5 64位到这步的时候报这个错: ./bin/mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)' Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists! 注意:./bin/mysqladmin -u root password '123456'//这个步骤可忽略,如果执行了这一步,等登录时mysql -u root -p就得输入该密码,如果没执行制一步登录的时候回车即可。 (10)把mysql客户端放到默认路径: [root@localhost mysql]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql。 (11)进入命令行操作: [root@localhost mysql]# mysql -u root -p(如果没有执行./bin/mysqladmin -u root password '123456'则默认密码为空,直接回车即可) Enter password: 123456 mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.35 | +-----------+ 1 row in set (0.00 sec) 如果你想修改root密码的话可执行下面的语句: mysql> set password for root@localhost = password('bigdata'); Query OK, 0 rows affected (0.06 sec) 2.Centos7.2安装mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz: 下载安装包地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz (1)进入安装包所在目录: [root@localhost ~]# cd /usr/local [root@localhost local]# tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz [root@localhost local]# rm -rf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz [root@localhost local]# mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql或者ln -s mysql-5.7.17-linux-glibc2.5-x86_64 mysql (2)创建用户和组: groupadd mysql useradd -g mysql -s /sbin/nologin mysql (3)配置PATH: echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile (4)数据库目录规划: 文件类型 实例3306 软链 数据datadir /usr/local/mysql/data /data/mysql/data 参数文件my.cnf /usr/local/mysql/etc/my.cnf 错误日志log-error /usr/local/mysql/log/mysql_error.log 二进制日志log-bin /usr/local/mysql/binlogs/mysql-bin /data/mysql/binlogs/mysql-bin 慢查询日志slow_query_log_file /usr/local/mysql/log/mysql_slow_query.log 套接字socket文件 /usr/local/mysql/run/mysql.sock pid文件 /usr/local/mysql/run/mysql.pid 备注:考虑到数据和二进制日志比较大,需要软链: mkdir -p /data/mysql/{data,binlogs,log,etc,run} ln -s /data/mysql/data /usr/local/mysql/data ln -s /data/mysql/binlogs /usr/local/mysql/binlogs ln -s /data/mysql/log /usr/local/mysql/log ln -s /data/mysql/etc /usr/local/mysql/etc ln -s /data/mysql/run /usr/local/mysql/run chown -R mysql.mysql /data/mysql/ chown -R mysql.mysql /usr/local/mysql/{data,binlogs,log,etc,run} 也可以只对数据目录和二进制日志目录软链: mkdir -p /usr/local/mysql/{log,etc,run} mkdir -p /data/mysql/{data,binlogs} ln -s /data/mysql/data /usr/local/mysql/data ln -s /data/mysql/binlogs /usr/local/mysql/binlogs chown -R mysql.mysql /usr/local/mysql/{data,binlogs,log,etc,run} chown -R mysql.mysql /data/mysql (5)配置my.cnf参数文件: 删除系统自带的my.cnf:rm -f /etc/my.cnf 在/usr/local/mysql/etc/下创建my.cnf文件,加入如下参数,其他参数根据需要配置: [client] port = 3306 socket = /usr/local/mysql/run/mysql.sock [mysqld] port = 3306 socket = /usr/local/mysql/run/mysql.sock pid_file = /usr/local/mysql/run/mysql.pid datadir = /usr/local/mysql/data default_storage_engine = InnoDB max_allowed_packet = 512M max_connections = 2048 open_files_limit = 65535 skip-name-resolve lower_case_table_names=1 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' innodb_buffer_pool_size = 1024M innodb_log_file_size = 2048M innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 0 key_buffer_size = 64M log-error = /usr/local/mysql/log/mysql_error.log log-bin = /usr/local/mysql/binlogs/mysql-bin slow_query_log = 1 slow_query_log_file = /usr/local/mysql/log/mysql_slow_query.log long_query_time = 5 tmp_table_size = 32M max_heap_table_size = 32M query_cache_type = 0 query_cache_size = 0 server-id=1 (6)初始化数据库: cd mysql ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize(会卡在这里一段时间,请耐心等待) 打开另一个终端在日志文件里会提示一个临时密码,记录这个密码(等待的时间会有点长) grep 'temporary password' /usr/local/mysql/log/mysql_error.log 2017-03-12T13:26:30.619610Z 1 [Note] A temporary password is generated for root@localhost: b#uhQy*=d7yH (7)生成ssl,给数据库加密: mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ Generating a 2048 bit RSA private key .....................................................................................................+++ ...................................................+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key ..........................................................................................+++ .....................................................................................................................................................................................................+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ...............................+++ ......+++ writing new private key to 'client-key.pem' ----- (8)设置启动项: CentOS 6: cd /usr/local/mysql cp support-files/mysql.server /etc/init.d/mysql.server chkconfig --add mysql.server chkconfig mysql.server on chkconfig --list CentOS 7: cd /usr/lib/systemd/system touch mysqld.service vi mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql Type=forking PIDFile=/usr/local/mysql/run/mysqld.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables #ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/run/mysqld.pid $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 65535 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false 加载: systemctl daemon-reload systemctl enable mysqld.service systemctl is-enabled mysqld (9)启动mysql: systemctl start mysqld.service (10)进入命令行操作: mysql -u root -p Enter password:(输入前面生成的临时密码) mysql> select version(); ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> set password=password('A123456'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select version(); +------------+ | version() | +------------+ | 5.7.17-log | +------------+ 1 row in set (0.00 sec) (11)设置远程访问: 在远程访问之前需先打开centos7的端口: [root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent success 重启防火墙: [root@localhost ~]# firewall-cmd --reload success 注:不知道这两步有什么用,一开始我没执行这两步直接进行下面操作好像也没有什么影响啊。但命令比较新,写出来以后可参考。 (12)授权: 格式:grant all privileges on *.* to 远程访问用户名@'%' identified by '用户密码'; mysql> grant all privileges on *.* to root@'%' identified by 'A123456'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 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> select host,user from user;(多出1条远程登录用户记录) +-----------+-----------+ | host | user | +-----------+-----------+ | % | root | | localhost | mysql.sys | | localhost | root | +-----------+-----------+ 3 rows in set (0.00 sec) 参考:Centos7 安装MySQL 5.7 (通用二进制包) 去官网下载包的速度特别的慢,这里给你们一个下载快的地址:http://mirrors.sohu.com/mysql/ 四、安装方法三:yum安装 Redhat5.5和6.5用yum -y install mysql*就行。 Centos7.2中利用yum命令安装mysql: 参考:在CentOS7中利用yum命令安装mysql 安装服务端:mysql-server、mysql-devel;安装客户端:mysql: yum install mysql-server mysql-devel mysql 不仔细看你会觉得已经安装成功了,其实mysql-server没有安装成功! 我们需要手动下载一下,再单独安装mysql-server,此处用到wget命令: 下载rpm包: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装rpm包: rpm -ivh mysql-community-release-el7-5.noarch.rpm 检查是否安装成功,如下图安装成功: ls -1 /etc/yum.repos.d/mysql-community* 安装mysql-server,这次如下图就真的安装好了!!! yum install mysql-server 启动mysql: service mysqld start或者/etc/init.d/mysqld start 创建root管理员: mysqladmin -u root password 123456 登录mysql: mysql -uroot -p123456 五、安装方法四:rpm安装 参考:CentOS 7下使用RPM安装mysql5.7.13 1.卸载系统自带的 mariadb-lib: [root@centos-linux ~]# rpm -qa|grep mariadb mariadb-libs-5.5.44-2.el7.centos.x86_64 [root@centos-linux ~]# rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps 下载 rpm 安装包: 去官网找到最新的 rpm 集合包。类似 mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar复制其下载地址,在服务器下载 (或者本地下载了上传至服务器)。 [root@centos-linux ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar 然后解压: [root@centos-linux ~]# ls mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar [root@centos-linux ~]# tar xvf mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar mysql-community-test-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.13-1.el7.x86_64.rpm mysql-community-server-5.7.13-1.el7.x86_64.rpm mysql-community-client-5.7.13-1.el7.x86_64.rpm mysql-community-common-5.7.13-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.13-1.el7.x86_64.rpm mysql-community-devel-5.7.13-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.13-1.el7.x86_64.rpm mysql-community-libs-5.7.13-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.13-1.el7.x86_64.rpm 安装: 至少安装两个:server 和 client, 但是存在包的依赖关系,所以依次执行(几个包有依赖关系,所以执行有先后)下面命令安装: [root@centos-linux ~]# rpm -ivh mysql-community-common-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-libs-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-client-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-server-5.7.13-1.el7.x86_64.rpm 数据库初始化: 为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化: mysqld --initialize --user=mysql 如果是以 mysql 身份运行,则可以去掉 --user 选项。 另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。 这里演示使用的 --initialize 初始化的,会生成一个 root 账户密码,密码在log文件里: 上图里的最后一行则给出了生成的密码,现在就可以启动数据库了,然后使用上面的密码登陆: [root@centos-linux ~]# systemctl start mysqld [root@centos-linux ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.13 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 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> 修改 root 密码: 该密码被标记为过期了,如果想正常使用还需要修改密码 mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 以前的 password()函数将会被抛弃,官方建议使用下面的命令来修改密码: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 同时,如果你设置的密码过于简单也会报错: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 具体关于设置密码的规则,可以看这一篇这里我们注意设置密码 长度要大于8,同时要有数字,大小写,特殊字符。,可以修改上面这些配置减弱密码强度验证,比如:set global validate_password_policy=LOW、set global validate_password_length=4 检查进程和端口监听: ps -ef | grep mysql netstat -ano | grep 3306 注意:在执行mysql -uroot -p命令后可能报如下的错误: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory. 解决:ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5 error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory. 解决:ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5 linux安装mysql服务分四种安装方法:一.源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错;二.使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。三.yum安装四.rpm安装安装方法一:请看我的另一篇文章:mysql源码脚本安装安装方法二:(Redh... 小强签名设计 · 2017-08-22 11:44:01 发布 文章目录 一、前言 二、安装方法一:源码安装/编译安装 三、安装方法二(通用二进制包):mysql-x.x.xx-linux-glibcx.x-xxx.tar.gz 1.Redhat5.5 32/RedHat6.6和6.5 64位/Centos7.2 64位位下安装mysql 5.6.35: 2.Centos7.2安装mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz: 四、安装方法三:yum安装 五、安装方法四:rpm安装 一、前言 linux安装mysql服务分四种安装方法: 源码安装:优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错。 使用官方编译好的二进制文件安装:优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。 yum安装。 rpm安装。 二、安装方法一:源码安装/编译安装 请看我的另一篇文章:mysql源码脚本安装 三、安装方法二(通用二进制包):mysql-x.x.xx-linux-glibcx.x-xxx.tar.gz 1.Redhat5.5 32/RedHat6.6和6.5 64位/Centos7.2 64位位下安装mysql 5.6.35: (1)进入安装包所在目录: [root@localhost ~]# cd /usr/local [root@localhost local]# tar -zxvf mysql-5.6.35-linux-glibc2.5-i686.tar.gz [root@localhost local]# rm -rf mysql-5.6.35-linux-glibc2.5-i686.tar.gz [root@localhost local]# mv mysql-5.6.35-linux-glibc2.5-i686/ mysql (2)添加系统mysql组和mysql用户: [root@localhost local]# groupadd mysql [root@localhost local]# useradd -r -g mysql mysql (3)修改当前目录拥有者为mysql用户: [root@localhost local]# cd mysql/ [root@localhost mysql]# chown -R mysql:mysql ./ (4)安装数据库: [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql 注:在RedHat6.6和6.5 64位安装时遇到了这些问题: [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql sh: ./bin/my_print_defaults: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory FATAL ERROR: Neither host 'h149' nor 'localhost' could be looked up with ./bin/resolveip Please configure the 'hostname' command to return a correct hostname. If you want to solve this at a later stage, restart this script with the --force option 网上有的说是版本的原因,mysql是32位的,而系统是64位。可是我后来在64位上也安装成功了啊 解决:yum -y install ld-linux.so.2 libaio.so.1 libstdc++.so.6 libncurses.so.5 补充:Linux 下查看系统是32位 还是64 位的方法: [root@localhost ~]# uname -a (RedHat6.6 64位) Linux localhost.localdomain 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# uname -a (RedHat5.5 32位) Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:43 EDT 2010 i686 i686 i386 GNU/Linux 注:Centos7.2 64位这步遇到的问题 [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql -bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory 解决:[root@localhost mysql]# yum -y install perl autoconf ld-linux.so.2 libstdc++* libstdc++.so.6 libaio.so.1 libncurses.so.5 (5)修改当前目录拥有者为root用户: [root@localhost mysql]# chown -R root:root ./ (6)修改当前data目录拥有者为mysql用户: [root@localhost mysql]# chown -R mysql:mysql data (这些赋权限的也不知道有啥用,我后来试了一下,即使都没给他们赋权最后mysql也安装成功了,但为了怕以后有什么问题,还是都按步骤来吧) (7)添加开机启动: [root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql (8)启动mysql服务: [root@localhost mysql]# service mysql start 注:Centos7.2 64位这步遇到的问题 [root@localhost mysql]# service mysql start Starting MySQL.170810 19:43:05 mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid). 解决:修改/etc/my.cnf中的这两行为 [root@localhost mysql]# vi /etc/my.cnf log-error=/var/log/mysql/mysql.log pid-file=/var/run/mysql/mysql.pid 执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功。 (9)修改mysql的root用户密码,root初始密码为空: [root@localhost mysql]# ./bin/mysqladmin -u root password '123456' Warning: Using a password on the command line interface can be insecure. (翻译过来是:在命令行界面上使用密码是不安全的) 注:RedHat6.6和6.5 64位到这步的时候报这个错: ./bin/mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)' Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists! 注意:./bin/mysqladmin -u root password '123456'//这个步骤可忽略,如果执行了这一步,等登录时mysql -u root -p就得输入该密码,如果没执行制一步登录的时候回车即可。 (10)把mysql客户端放到默认路径: [root@localhost mysql]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql。 (11)进入命令行操作: [root@localhost mysql]# mysql -u root -p(如果没有执行./bin/mysqladmin -u root password '123456'则默认密码为空,直接回车即可) Enter password: 123456 mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.35 | +-----------+ 1 row in set (0.00 sec) 如果你想修改root密码的话可执行下面的语句: mysql> set password for root@localhost = password('bigdata'); Query OK, 0 rows affected (0.06 sec) 2.Centos7.2安装mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz: 下载安装包地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz (1)进入安装包所在目录: [root@localhost ~]# cd /usr/local [root@localhost local]# tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz [root@localhost local]# rm -rf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz [root@localhost local]# mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql或者ln -s mysql-5.7.17-linux-glibc2.5-x86_64 mysql (2)创建用户和组: groupadd mysql useradd -g mysql -s /sbin/nologin mysql (3)配置PATH: echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile (4)数据库目录规划: 文件类型 实例3306 软链 数据datadir /usr/local/mysql/data /data/mysql/data 参数文件my.cnf /usr/local/mysql/etc/my.cnf 错误日志log-error /usr/local/mysql/log/mysql_error.log 二进制日志log-bin /usr/local/mysql/binlogs/mysql-bin /data/mysql/binlogs/mysql-bin 慢查询日志slow_query_log_file /usr/local/mysql/log/mysql_slow_query.log 套接字socket文件 /usr/local/mysql/run/mysql.sock pid文件 /usr/local/mysql/run/mysql.pid 备注:考虑到数据和二进制日志比较大,需要软链: mkdir -p /data/mysql/{data,binlogs,log,etc,run} ln -s /data/mysql/data /usr/local/mysql/data ln -s /data/mysql/binlogs /usr/local/mysql/binlogs ln -s /data/mysql/log /usr/local/mysql/log ln -s /data/mysql/etc /usr/local/mysql/etc ln -s /data/mysql/run /usr/local/mysql/run chown -R mysql.mysql /data/mysql/ chown -R mysql.mysql /usr/local/mysql/{data,binlogs,log,etc,run} 也可以只对数据目录和二进制日志目录软链: mkdir -p /usr/local/mysql/{log,etc,run} mkdir -p /data/mysql/{data,binlogs} ln -s /data/mysql/data /usr/local/mysql/data ln -s /data/mysql/binlogs /usr/local/mysql/binlogs chown -R mysql.mysql /usr/local/mysql/{data,binlogs,log,etc,run} chown -R mysql.mysql /data/mysql (5)配置my.cnf参数文件: 删除系统自带的my.cnf:rm -f /etc/my.cnf 在/usr/local/mysql/etc/下创建my.cnf文件,加入如下参数,其他参数根据需要配置: [client] port = 3306 socket = /usr/local/mysql/run/mysql.sock [mysqld] port = 3306 socket = /usr/local/mysql/run/mysql.sock pid_file = /usr/local/mysql/run/mysql.pid datadir = /usr/local/mysql/data default_storage_engine = InnoDB max_allowed_packet = 512M max_connections = 2048 open_files_limit = 65535 skip-name-resolve lower_case_table_names=1 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' innodb_buffer_pool_size = 1024M innodb_log_file_size = 2048M innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 0 key_buffer_size = 64M log-error = /usr/local/mysql/log/mysql_error.log log-bin = /usr/local/mysql/binlogs/mysql-bin slow_query_log = 1 slow_query_log_file = /usr/local/mysql/log/mysql_slow_query.log long_query_time = 5 tmp_table_size = 32M max_heap_table_size = 32M query_cache_type = 0 query_cache_size = 0 server-id=1 (6)初始化数据库: cd mysql ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize(会卡在这里一段时间,请耐心等待) 打开另一个终端在日志文件里会提示一个临时密码,记录这个密码(等待的时间会有点长) grep 'temporary password' /usr/local/mysql/log/mysql_error.log 2017-03-12T13:26:30.619610Z 1 [Note] A temporary password is generated for root@localhost: b#uhQy*=d7yH (7)生成ssl,给数据库加密: mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ Generating a 2048 bit RSA private key .....................................................................................................+++ ...................................................+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key ..........................................................................................+++ .....................................................................................................................................................................................................+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ...............................+++ ......+++ writing new private key to 'client-key.pem' ----- (8)设置启动项: CentOS 6: cd /usr/local/mysql cp support-files/mysql.server /etc/init.d/mysql.server chkconfig --add mysql.server chkconfig mysql.server on chkconfig --list CentOS 7: cd /usr/lib/systemd/system touch mysqld.service vi mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql Type=forking PIDFile=/usr/local/mysql/run/mysqld.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables #ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/run/mysqld.pid $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 65535 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false 加载: systemctl daemon-reload systemctl enable mysqld.service systemctl is-enabled mysqld (9)启动mysql: systemctl start mysqld.service (10)进入命令行操作: mysql -u root -p Enter password:(输入前面生成的临时密码) mysql> select version(); ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> set password=password('A123456'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select version(); +------------+ | version() | +------------+ | 5.7.17-log | +------------+ 1 row in set (0.00 sec) (11)设置远程访问: 在远程访问之前需先打开centos7的端口: [root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent success 重启防火墙: [root@localhost ~]# firewall-cmd --reload success 注:不知道这两步有什么用,一开始我没执行这两步直接进行下面操作好像也没有什么影响啊。但命令比较新,写出来以后可参考。 (12)授权: 格式:grant all privileges on *.* to 远程访问用户名@'%' identified by '用户密码'; mysql> grant all privileges on *.* to root@'%' identified by 'A123456'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 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> select host,user from user;(多出1条远程登录用户记录) +-----------+-----------+ | host | user | +-----------+-----------+ | % | root | | localhost | mysql.sys | | localhost | root | +-----------+-----------+ 3 rows in set (0.00 sec) 参考:Centos7 安装MySQL 5.7 (通用二进制包) 去官网下载包的速度特别的慢,这里给你们一个下载快的地址:http://mirrors.sohu.com/mysql/ 四、安装方法三:yum安装 Redhat5.5和6.5用yum -y install mysql*就行。 Centos7.2中利用yum命令安装mysql: 参考:在CentOS7中利用yum命令安装mysql 安装服务端:mysql-server、mysql-devel;安装客户端:mysql: yum install mysql-server mysql-devel mysql 不仔细看你会觉得已经安装成功了,其实mysql-server没有安装成功! 我们需要手动下载一下,再单独安装mysql-server,此处用到wget命令: 下载rpm包: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装rpm包: rpm -ivh mysql-community-release-el7-5.noarch.rpm 检查是否安装成功,如下图安装成功: ls -1 /etc/yum.repos.d/mysql-community* 安装mysql-server,这次如下图就真的安装好了!!! yum install mysql-server 启动mysql: service mysqld start或者/etc/init.d/mysqld start 创建root管理员: mysqladmin -u root password 123456 登录mysql: mysql -uroot -p123456 五、安装方法四:rpm安装 参考:CentOS 7下使用RPM安装mysql5.7.13 1.卸载系统自带的 mariadb-lib: [root@centos-linux ~]# rpm -qa|grep mariadb mariadb-libs-5.5.44-2.el7.centos.x86_64 [root@centos-linux ~]# rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps 下载 rpm 安装包: 去官网找到最新的 rpm 集合包。类似 mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar复制其下载地址,在服务器下载 (或者本地下载了上传至服务器)。 [root@centos-linux ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar 然后解压: [root@centos-linux ~]# ls mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar [root@centos-linux ~]# tar xvf mysql-5.7.13-1.el7.x86_64.rpm-bundle.tar mysql-community-test-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.13-1.el7.x86_64.rpm mysql-community-server-5.7.13-1.el7.x86_64.rpm mysql-community-client-5.7.13-1.el7.x86_64.rpm mysql-community-common-5.7.13-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.13-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.13-1.el7.x86_64.rpm mysql-community-devel-5.7.13-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.13-1.el7.x86_64.rpm mysql-community-libs-5.7.13-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.13-1.el7.x86_64.rpm 安装: 至少安装两个:server 和 client, 但是存在包的依赖关系,所以依次执行(几个包有依赖关系,所以执行有先后)下面命令安装: [root@centos-linux ~]# rpm -ivh mysql-community-common-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-libs-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-client-5.7.13-1.el7.x86_64.rpm [root@centos-linux ~]# rpm -ivh mysql-community-server-5.7.13-1.el7.x86_64.rpm 数据库初始化: 为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化: mysqld --initialize --user=mysql 如果是以 mysql 身份运行,则可以去掉 --user 选项。 另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。 这里演示使用的 --initialize 初始化的,会生成一个 root 账户密码,密码在log文件里: 上图里的最后一行则给出了生成的密码,现在就可以启动数据库了,然后使用上面的密码登陆: [root@centos-linux ~]# systemctl start mysqld [root@centos-linux ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.13 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 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> 修改 root 密码: 该密码被标记为过期了,如果想正常使用还需要修改密码 mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 以前的 password()函数将会被抛弃,官方建议使用下面的命令来修改密码: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 同时,如果你设置的密码过于简单也会报错: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 具体关于设置密码的规则,可以看这一篇这里我们注意设置密码 长度要大于8,同时要有数字,大小写,特殊字符。,可以修改上面这些配置减弱密码强度验证,比如:set global validate_password_policy=LOW、set global validate_password_length=4 检查进程和端口监听: ps -ef | grep mysql netstat -ano | grep 3306 注意:在执行mysql -uroot -p命令后可能报如下的错误: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory. 解决:ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5 error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory. 解决:ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5 原文链接:https://gitcode.csdn.net/65e7d91b1a836825ed78a654.html
-
1.下载方式 mysql下载 链接: link. 1.1 Linux 内部下载(不推荐,比较慢) 1.建一个存放压缩包的文件夹 回到根目录: cd / 创建存放压缩包目录: mkdir /data/path 2.官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 1.2 本地下载,上传到linux https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 2.解压 1. 需先将 .xz 文件解压为 .tar文件 xz -dk mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 2. 解压 .tar文件 tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar 当前目录解压后移动到想安装的目录并重命名 mv mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/src/mysql 3.创建MYSQL⽤户和⽤户组 groupadd mysql useradd -g mysql mysql 4.配置my.cnf vim /etc/my.cnf 内容如下 (指向的目录要事先创建好) 否则会报错 按 a 进行编辑 [mysql] # 连接数据库的IP连接 0.0.0.0 默认都可以连接 bind-address=0.0.0.0 # 设置mysql客户端默认字符集 default-character-set=utf8 #为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件 socket=/tmp/mysql.sock #服务端基本设置 [mysqld] #跳过客户端域名解析;当新的客户连接mysqld时,mysqld创建一个新的线程来处理请求。该线程先检查是否主机名在主机名缓存中。如果不在,线程试图解析主机名。 skip-name-resolve #设置3306端⼝ port = 3306 # 设置mysql的安装⽬录 basedir=/usr/local/src/mysql # 设置mysql数据库的数据的存放⽬录 datadir=/data/mysql # 允许最⼤连接数 max_connections=200 # 服务端使⽤的字符集默认为8⽐特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使⽤的默认存储引擎 default-storage-engine=INNODB 按 esc 按 shift + : 输入 wq 回车保存 q! 不保存退出 5.初始化数据库 5.1进入mysql的bin目录 cd /usr/local/src/mysql/bin/ 5.2 初始化 ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/src/mysql/ --datadir=/data/mysql/ --user=mysql --initialize 记住上⾯打印出来的 root 的密码,后⾯⾸次登陆需要使⽤ 若是报错 error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 需安装 依赖 执行 yum install -y libaio 6.启动mysql 6.1先将启动脚本 mysql.server放置到/etc/init.d/mysql中 cp /usr/local/src/mysql/support-files/mysql.server /etc/init.d/mysql 6.2启动 启动!!! service mysql start 到这就安装成功了 若是报错 Starting MySQL.2023-02-17T08:07:11.961383Z mysqld_safe error: log-error set to ‘/var/log/mariadb/mariadb.log’, however file don’t exists. Create writable for user ‘mysql’. The server quit without updating PID file (/usr/local/data/[FAILED]gqkgr1mgrhyk2sZ.pid). 检查配置文件指向目录,初始化指向目录是否都有。 6.3将 MYSQL 的 BIN ⽬录加⼊ PATH 环境变量 编辑 ~/.bash_profile ⽂件,在⽂件末尾处追加如下信息: export PATH=$PATH:/usr/local/mysql/bin vi ~/.bash_profile 按 a 编辑 完成后 按 esc 按 shift + : 输入 wq 回车保存 q! 不保存退出 后执⾏如下命令使环境变量⽣效 source ~/.bash_profile 6.4 首次登录 以 root 账户登录 mysql ,使⽤上⽂安装完成提示的密码进⾏登⼊ mysql -u root -p 6.5 修改root密码 #修改root密码 alter user user() identified by "root"; # 刷新 flush privileges; 6.6 设置远程主机登录 #进入 mysql 表 use mysql; # 修改访问权限 update user set user.Host='%' where user.User='root'; # 刷新 flush privileges; 可以选择关闭防火墙 链接: 关闭防火墙. 或者端口号外放 (建议) 链接: 开启外部访问端口号. ———————————————— 原文链接:https://blog.csdn.net/weixin_53887935/article/details/123641407
-
1、下载MySQL数据库 2、安装版安装 安装版安装的好处是:可以选择需要的组件安装,配置相对简单,后续可以通过MySQL Installer方便地添加、修改、更新、移除组件 (1)运行安装程序 这里选择自定义安装才能更改安装位置,否则默认安装在C盘,如果熟悉了MySQL,建议选择自定义安装 安装 Windows 系统框架(Framework),单击 Execute 按钮,安装程序会自动完成框架的下载,进行安装即可 所需框架均安装成功后,点击 Next 按钮 进入安装确认窗口,点击 Execute 按钮,开始 MySQL 各个组件的安装 安装完成后在【Status】列表下显示 Complete (2)配置MySQL 在安装的最后一步中,点击 Next 按钮进入服务器配置窗口,进行配置信息的确认,确认后点击 Next 按钮 配置完成,点击execute 在“Starting the server”位置卡住不动,然后提示错误无法安装,可能是你下载的数据库版本过高与系统不匹配,可以降低数据库版本或者升级系统版本。 接下来finish、next,即安装完成了 打开任务管理器,可以看到MySQL服务正在运行 3、解压版安装 请务必仔细地按照步骤说明和截图所示进行,尽量一次成功,如果不行,使用 mysqld -remove 命令卸载MYSQL服务,并删除整个MySQL文件夹,再重新解压,开始再次安装。 (1)下载压缩包,解压到某个目录 (2)在MySQL安装目录下创建配置文件my.ini [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 服务端使用的字符集默认为utf8mb4 character-set-server=utf8 # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=D:\Developer\DB\Database\mysql-5.7.31\ # 设置mysql数据库的数据的存放目录 datadir=D:\Developer\DB\Database\mysql-5.7.31\data\ # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 允许最大连接数 max_connections=20 # 允许连接失败的次数。 max_connect_errors=10 # 严格模式 #sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES" # 默认使用“mysql_native_password”插件认证 #default_authentication_plugin=mysql_native_password # 跳过密码验证,设置密码后注释掉 #skip-grant-tables (3)配置环境变量 如果不配置环境变量,每次登录MySQL 服务器时就必须进入到 MySQL 的 bin 目录下,才能执行 MySQL 的命令,这样比较麻烦。 配置环境变量以后就可以在任意位置执行 MySQL 的命令 进入环境变量配置窗口,新建MYSQL_HOME变量,变量值为“D:\Program Files\MySQL\MySQL Server 5.7”(改为自己的解压目录) 在Path变量值最前面添加“%MYSQL_HOME%\bin;”,确定保存,环境变量从上往下读取,添加在最前面可以防止被覆盖 (4)以管理员身份运行cmd,执行以下命令 mysqld -install ,安装MySQL服务 mysqld --initialize --console ,初始化MySQL服务,在指定目录下生成data文件夹,生成随机密码并在控制台显示 初始化完成后,生成的data文件夹 net start mysql ,启动MySQL服务 mysql -u root -p ,回车输入密码, 登录数据库,输入密码时请务必小心,这是最容易出错的地方。 修改密码,以下三种方式都可以,一般第一种就可以了 alter user 'root'@'localhost' identified by '123456'; 或 set password for root@localhost=password('1234567'); 或 update mysql.user set authentication_string=password("xxx") where user="root"; 和 flush privileges; 4、启动、停止MySQL服务 MySQL 服务和 MySQL 数据库不同,MySQL 服务是一系列的后台进程,而 MySQL 数据库则是一系列的数据目录和数据文件。 MySQL 数据库必须在 MySQL 服务启动之后才可以进行访问。 Windows 系统下启动停止 MySQL 服务的方式主要有以下两种: 通过计算机管理方式 通过命令行方式 (1)通过计算机管理方式 选中右键,可以将服务状态设置为“启动”、“停止”、“暂停”、“恢复”、“重新启动” 右键属性,还可以设置启动类型,可以选择“自动(延迟启动)”、“自动”、“手动”和“禁用” 如果需要经常练习 MySQL 数据库的操作,可以将 MySQL 设置为自动启动,这样可以避免每次手动启动 MySQL 服务。当然,如果使用 MySQL 数据库的频率很低,可以考虑将 MySQL 服务设置为手动启动,这样可以避免 MySQL 服务长时间占用系统资源。 (2)通过命令行方式 以管理员身份运行cmd命令,不以管理员身份运行会拒绝访问 net start MySQL服务名 net stop MySQL服务名 5、登录MySQL数据库 登录MySQL数据库前,需确保MySQL 服务已开启 (1)使用 DOS 命令登录MySQL数据库 以管理员身份运行cmd命令,不以管理员身份运行会拒绝访问 mysql [-h 主机名 -P 端口号] -u root -p回车再输入密码 密码不会明文显示 mysql -h localhost -u root -p密码 p和密码之间不能有空格,这种方式密码会明文显示,不安全 status 查看MySQL信息 show databases; 查看所有数据库 exit; 或 quit; 退出登录 mysql 为登录命令,-h 后面的参数是服务器的主机地址,在这里客户端和服务器在同一台机器上,所以输入 localhost 或者 127.0.0.1;-u 后面跟登录数据库的用户名称,在这里为 root;-p 后面是用户登录密码。 当命令提示符变为“mysql>”时,表明已经成功登录 MySQL数据库,可以开始对数据库进行操作了 (2)通过命令行客户端软件登录 MySQL 数据库 当 MySQL 安装版 安装完后,一般都会有一个简单命令行使用程序(MySQL Command Line Client), 可在开始菜单中找到 打开后输入密码即可登录,但只能登录root账户 6、MySQL常用命令 前缀为:C:\Windows\system32> cls 清除屏幕内容 sc delete mysql 删除MysQL服务,慎用 mysqld -remove 卸载MySQL服务 mysqld -install 安装MySQL服务 mysqld --initialize 初始化MySQL服务,在MysQL目录下生成data文件夹,生成密码但不在控制台显示,可在data文件夹后缀名为.err的文件中,Ctrl+F搜索’password‘查找 mysqld --initialize --console 初始化MySQL服务,在MysQL目录下生成data文件夹,生成密码并在控制台显示 mysqld --initialize-insecure 初始化MySQL服务,在MysQL目录下生成data文件夹,不生成密码 net start mysql 启动MySQL服务 net stop mysql 停止MySQL服务 mysql [-h 主机名 -P 端口号] -u root -p回车再输入密码 密码不会明文显示 mysql [-h 主机名 -P 端口号] -u root -p密码 p和密码之间不能有空格,这种方式密码会明文显示,不安全 mysql -u root -p mysql> # 授权 grant all privileges on *.* to user@'ip' identified by 'password' with grant option; flush privileges; #all privileges: 授予所有权限(即select、update、insert和delete) #*.*: 第一个“*”代表授权访问所有的数据库,第二个"*"代表数据库中的所有的表 #user: 授予访问权限的用户 #ip: 授予访问权限的ip地址,%代表所有ip #password: 授予访问权限的密码 #with grant option: 授予可以授予权限的权限 #grant all privileges on *.* to root@'192.168.3.21' identified by '123456' with grant option: 授予192.168.3.21这个IP这样的权限,以root用户登录,密码为123456,可以访问所有数据库中的所有表并且可以进行增删查改操作,而且可以授予其他人权限。 #修改密码 alter user 'root'@'localhost' identified by '密码'; 或 set password for root@localhost=password('xxxxxx'); 或 update mysql.user set authentication_string=password("xxx") where user="root"; flush privileges 刷新权限 #退出登录 exit; 或 quit; status #查看MySQL信息 select version(); #查看MySQL版本 或 C:\Windows\system32>mysql --version 或 C:\Windows\system32>mysql -V #查看数据库表 show databases; 查看所有数据库 use mysql; 切换数据库 show tables; 查看当前库所有表 show tables from mysql; 不切换数据库,查看其他库所有表 select database(); 查看当前数据库 desc user; 查看表结构,desc为describe的缩写 当前连接进程 show processlist; 最大连接数 show global variables like "%max_connections%"; 最大等待秒数 show global variables like "%wait_timeout%"; 最大错误连接数 show global variables like "%max_connect_errors%"; source D:/xxx.sql 使用脚本文件,导入数据 7、MySQL目录结构 MySQL安装版的 data目录和 my.ini 文件可能不在 MySQL 的安装目录下,而是在 “C:\ProgramData\MySQL\MySQL Server 5.7 ”或其他自定义的目录下。 一般情况下,C 盘下的 ProgramData 目录是隐藏的,需要取消隐藏。 (1)bin目录 用于放置MySQL常用的命令工具以及管理工具,如 mysql.exe、mysqld.exe、mysqlshow.exe 等。 (2)data目录 登录数据库后,可使用 SHOW GLOBAL VARIABLES LIKE "%Datadir%"; 命令查看 data 目录位置。 data 目录中用于放置一些数据文件以及日志文件,我们创建和保存的数据都存在这个目录里。 (3)doc目录 存放一些帮助文档。 (4)include目录 用于放置一些头文件,如:mysql.h、mysql_ername.h 等。 (5)lib目录 用于放置一系列库文件。 (6)share目录 用于存放字符集、语言等信息 (7)my.ini文件 除了my.ini文件,MySQL 安装目录下可能还有几个后缀名为.ini的配置文件,这些是适合不同数据库的配置文件的模板。 my.ini 是 MySQL 默认使用的配置文件,MySQL 服务器启动时会读取这个配置文件, 通过修改这个文件并重启服务,可以更新配置 my-huge.ini:适合超大型数据库的配置文件。 my-large.ini:适合大型数据库的配置文件。 my-medium.ini:适合中型数据库的配置文件。 my-small.ini:适合小型数据库的配置文件。 my-template.ini:是配置文件的模板,MySQL 配置向导将该配置文件中选择项写入到 my.ini 文件。 my-innodb-heavy-4G.ini:表示该配置文件只对于 InnoDB 存储引擎有效,而且服务器的内存不能小于 4GB。 8、MySQL配置文件详解 [client] port=3306 MySQL客户端连接服务器端时使用的端口号 [mysql] default-character-set=utf8 MySQL 客户端默认的字符集 [mysqld] port=3306 MySQL服务器的端口号 basedir=C:/Program Files/MySQL/MySQL Server 5.7/ MySQL的安装路径 datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data MySQL数据文件的存储位置,也是数据表的存放位置 character-set-server=utf8 服务器端默认的字符集 default-storage-engine=INNODB 创建数据表时,默认使用的存储引擎 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" SQL模式的参数,通过这个参数可以设置检验 SQL 语句的严格程度 max_connections=100 允许同时访问 MySQL 服务器的最大连接数。其中一个连接是保留的,留给管理员专用的 query_cache_size=0 查询时的缓存大小,缓存中可以存储以前通过 SELECT 语句查询过的信息,再次查询时就可以直接从缓存中拿出信息,可以改善查询效率 table_cache=256 tmp_table_size=35M 内存中每个临时表允许的最大大小 thread_cache_size=8 缓存的最大线程数 myisam_max_sort_file_size=100G MySQL 重建索引时所允许的最大临时文件的大小 myisam_sort_buffer_size=69M 重建索引时的缓存大小 key_buffer_size=55M 关键词的缓存大小 read_buffer_size=64K MyISAM表全表扫描的缓存大小 read_rnd_buffer_size=256K 将排序好的数据存入该缓存中 sort_buffer_size=256K 用于排序的缓存大小 以下是 InnoDB 存储引擎使用的参数 innodb_additional_mem_pool_size=3M 附加的内存池,用来存储 InnoDB 表的内容。 innodb_flush_log_at_trx_commit=1 设置提交日志的时机,若设置为 1,InnoDB 会在每次提交后将事务日志写到磁盘上 innodb_log_buffer_size=2M 用来存储日志数据的缓存区的大小 innodb_buffer_pool_size=107M 缓存的大小,InnoDB 使用一个缓冲池类保存索引和原始数据 innodb_log_file_size=54M 日志文件的大小 innodb_thread_concurrency=18 在 InnoDB 存储引擎允许的线程最大数 每次修改 my.ini 文件中的参数后,必须重启 MySQL 服务才会有效 暂时就写到这了,刚开始写博客,不太熟练,写得不好的地方请大家见谅! 如果您觉得这篇文章对您有帮助,就请随意点个赞吧!您的鼓励是将我坚持创作的巨大动力! ———————————————— 原文链接:https://blog.csdn.net/lian_yixin/article/details/108583248
-
MySQL安装与配置 MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。1、所用MySQL的版本为:MySQL_5_1_26.msi; 2、下载好软件后双击进入以下界面: 3、点击Next,进入以下界面: 4、选择“Custom”后,点击Next,进入以下界面: 5、然后点击图中所有的下拉可选项(总共四个),选择第二个选项,即“This feature,and all subfeatures,will be...”;其中的一个示例截图如下: 6、然后点击“Change”按钮,将安装路径改为:D:\MySQLsetup\;改完后的截图如下: 7、然后点击“Next”按钮,进入下个页面后点击“Install”按钮,然后等会儿会出现另一个界面,一直点击“Next”,进入以下界面: 8、然后勾选“√”(默认已经勾选)后点击“Finish”;然后在D:\MySQLsetup\bin目录下找到MySQLInstanceConfig.exe后双击,出现以下界面: 9、点击“Next”后出现以下界面: 10、选择第一个“Detailed Configuration”(默认选项),然后点击“Next”,进入以下界面: 11、选择第一个“Developer Machine”(默认选项),然后点击“Next”,进入以下界面: 12、选择第一个“Multifunction Database(默认选项),然后点击“Next”,进入以下界面: 13、这里可以修改路径,不过直接用默认的即可,直接点击“Next”,进入以下界面: 14、直接点击“Next”即可,进入以下界面: 15、点击“Next”后进入以下界面: 16、此时,选择第三个“Manual Selected...”,然后点击下拉框找到并选择“gb2312”,从而会支持中文,选择后如图所示: 17、然后点击“Next”,进入以下界面: 18、此时勾选“Include Bin...”后点击“Next”,然后出现的界面是: 19、在此界面设置root和密码,设置密码为“123456”(由于一开始安装没有设置密码,所以Current root password处不用填写),勾选“Enable...”然后界面如图所示: 20、然后点击“Next”后出现以下界面: 21、点击“Execute”后,出现以下界面然后点击“Finish”,则配置成功: 以上就是mysql 5.1.26安装配置方法,希望对大家的学习有所帮助。 ———————————————— 原文链接:https://blog.csdn.net/weixin_39895181/article/details/113117110
-
前言MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。一、下载MySQL1、打开浏览器(360、火狐等都行)这里用Edge浏览器演示。2、输入这串地址:https://www.mysql.com/,点击搜索。3、点击此处进入官网4、进入如下界面后点击DOWNLOADS/下载(有人进入中文界面就会显示“下载”)5、点击后进入下面这个界面:6、向下滑动,找到此处点击打开7、进入后,找到 MySQL installer for Windows点击打开8、进入此界面点击第二个下载9、点击此处,跳过注册直接安装10、点击此处找到安装包并打开二、安装MySQL1、打开文件后等待一会,进入此界面,点击YES2、进入后选择第三个,然后点击NEXT3、之后会进入这个界面,点击Execute,然后等待各组件安装完成4、各组件安装好后点击NEXT5、直接next开始配置MySQL6、进入此界面选择第一个NEXTEXT7、接下来会让我们选择密码认证方式,第一个为强密码,第二个为传统密码,这里建议选强密码。演示中我选择的是弱密码。8、配置密码上面是设密码,下面是让你确认密码,切记密码不要忘。然后next如下图所示:9、默认,NEXT10、 配置文件权限默认选第一个11、显示配置,直接Execute,等待配置完成跳转界面等待配置完成点击Finish12、Execute13、接下来的几个界面保持默认配置,Next14、输入刚设的密码15、跟着点三、查看1、点左下角2、输MySQL3、点击打开文件位置将快捷模式拖到桌面4、没了————————————————原文链接:https://blog.csdn.net/ls5633/article/details/135567242
-
使用msi安装的优点: 在使用zip手动安装后,隔一段时间MySQL服务会自动关闭,需要再次手动重启MySQL服务。而使用msi安装程序会避免这个问题,但安装过程有点繁琐。 msi官网下载步骤: MySQL :: Download MySQL Community Server https://dev.mysql.com/downloads/mysql/ 第一步:进入官网下载界面: 如果下载msi安装包,可以直接点击go to downloads page>进入msi下载界面; 第二步:下载msi安装包 先选择你要安装MySQL的设备的操作系统,然后点击download下载;我演示的是Windows系统下的MySQL安装;这里建议下载第二个,安装时会更快,第一个需要再次联网下载所需要的文件; 第三步: 点击no thanks,just start my download直接下载msi安装包; 我这里下载的是mysql-installer-community-8.0.29.0 打开安装包后会有两个弹窗,全部点击是;之后开始安装; 第一步:选择安装类型,(我这里选的是常规安装);点击next下一步 第二步:检测需要的安装(这里不用管,直接点next)下一步 第三步: 这里会显示缺少部件(不用管还是点击yes) 第四步:点击Execute,执行安装 第五步:安装执行完成,点击next下一步 第六步:这里是产品配置向导,点击next下一步 第七步:这里是类型与网络没有特别需求就点击next(小编只是初学者所有不改默认的选项)点击next下一步 第八步:因为我使用Navicat Premium 16管理数据库,它默认选第一个,但会与Navicat Premium 16不兼容,所以选择第二个,如图所示,选择完成点击next下一步 第九步:这里需要设置管理员密码(不用猜我用的什么密码-123456-我习惯使用弱口令,不容易忘记密码导致无法启动)个人喜好,在MySQL Root Password后的文本框内填入你的密码,在Repeat Password后的文本框内再次填入刚才输入的密码,点击next下一步(不要忘记密码哦) 第十步:这里将配置Windows服务,一定要保证Start the MySQL Server at System Startup(系统启动时启动MySQL服务器)是被选中的,不然后期需要手动启动服务(很麻烦),我电脑账户使用的是标准系统账户所以选择Standar System Account;点击next下一步 第十一步:这里到了应用配置界面,直接点击Execute安装就好了 第十二步:点击Finish完成(不要急还没有完成安装,还有很多没有完成的) 第十三步:到了产品配置了,不用管直接next下一步 第十四步:这是MySQL路由器配置,没有特殊要求就不去配置它,直接Finish完成,下一步 第十五步:回到产品配置,依旧是点击next下一步 第十六步:在这里注意要在Password后输入之前设置的管理员密码点击Check检查,如图就是检查通过,点击next下一步 第十七步:这是连接到服务器的应用配置,点击Execute应用更改 第十八步:点击Finish完成应用配置;下一步 第十九步:产品配置完成点击next下一步 第二十步:恭喜你安装完成,点击Finish完成安装 第二十一步:完成安装后会跳出这两个界面,说明安装成功;在左边的窗口可以对数据库进行指令操作,右边是MySQL自己的工作台;都可以直接关闭 ———————————————— 原文链接:https://blog.csdn.net/weixin_55107915/article/details/124227166
-
此次安装的版本为MySQL社区版,即MySQL Community Server。 一、下载安装包 第一步,登录MySQL官网www.mysql.com,进入产品下载页面。 第二步,进入产品下载页面后,向下滑动页面,找到MySQL Community(GPL)Downloads链接并进入。 第三步,选择社区版产品。 第四步,选择安装方式。通常有解压包安装和步骤安装两种方式,这里选择了解压包安装。 第五步,选择无需登录直接下载。 二、解压安装包 第一步,将下载好的安装包转移到你希望安装的文件目录下(我这里是在D盘创建了一个MySQL目录)。 第二步,点击右键全部解压缩。解压后文件目录如下。 三、设置配置文件 在解压目录创建my.ini文件并添加内容如下。 [mysqld] #设置3306端口 port=3306 #服务端使用的字符集默认为UTF8 character-set-server=utf8 #创建新表时将使用的默认存储引擎 default-storage-engine=INNODB [mysql] #设置mysql客户端默认字符集 default-character-set=utf8 [client] #设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8 四、配置系统环境 第一步,windows程序栏搜索系统变量,找到“编辑系统环境变量”并打开如下窗口,点击“环境变量”。 第二步,点击系统变量的窗口下的“新建”按钮,新建一个环境变量MYSQL_HOME,变量值填写解压后的文件地址,点击“确定”保存设置。 第三步,点击系统变量栏的Path变量,并进入编辑页面。 第四步,进入Path变量编辑窗口,点击“新建”,创建一个“%MYSQL_HOME%”变量的引用,并在后面添加bin目录,如下所示。 第五步,全部点确定保存设置。 五、初始化操作 完成环境变量设置后,还需要通过终端对MySQL进行一些初始化操作。注意,要使用管理员权限进入cmd。 第一步,进入MySQL的解压目录。由于MySQL我储存在了D目录,所以需要转换一下盘,然后进入相关目录。终端操作如下。 C:\Users\86130>D: D:>cd D:\MySQL\bin D:\MySQL\bin> 由此进入到了我的解压目录D:\MySQL的bin目录下。 第二步,对MySQL进行初始化。需要注意,此时会产生一个临时密码,后面要用到。这一步出错的话,需要清空data目录下的文件再试。 mysqld --initialize --console 第三步,安装MySQL服务。 mysqld --install 提示Service successfully installed就是安装成功了。 第四步,启动MySQL服务。命令如下。 net start mysql 终端完整操作如下。 D:\MySQL\bin>net start mysql MySQL 服务正在启动 . MySQL 服务已经启动成功。 如此MySQL服务已经成功启动。 第五步,登录MySQL,需要用到之前产生的临时密码。命令如下。 mysql -uroot -p 终端完整操作如下。 如此即进入了MySQL服务中。 第六步,修改root用户密码。修改密码为123456命令如下。 ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’; 完整终端操作如下。 mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’; Query OK, 0 rows affected (0.01 sec) 第七步,修改root用户权限。命令如下。 create user ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’; 完整终端操作如下。另外有朋友反映这个引号格式在复制粘贴时有问题,如果出现问题不妨自己手动输入试试。 mysql> create user ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’; Query OK, 0 rows affected (0.01 sec) 第八步,输入quit即可退出MySQL。 如此,MySQL环境已经搭建完毕。 原文链接:https://gitcode.csdn.net/65e83cfe1a836825ed78b0a8.htm
-
下载地址 官方下载地址:MySQL :: Download MySQL Installer 安装步骤 ①双击msi安装程序,进入如下界面,点击custom,点击next ②选择自己要安装的组件 MySQL Server:是数据库服务,要安装这个 。 MySQL Workbench:一款MySQL的ER/数据库建模工具。 MySQL for Visual Studio:你要是使用VS编程,并且要用VS来连接数据库进行表管理就需要装这个。 MySQL for Excel:是一个Excel插件,能让我们在Microsoft excel中处理MySQL数据。 MySQL Notifier :是一款 MySQL 数据库的辅助工具。它可以在系统任务栏通知区域(系统托盘)处驻留图标,用于快捷监视、更改服务器实例(服务)的状态。同时,也可以与一些图形化管理工具(如 MySQL Workbench)集成使用。一般用不到。 MySQL Shell:是MySQL Server的高级客户端和代码编辑器。 MySQL Router:一般用不到。 MySQL Connector :一些连接mysql的驱动包。 MySQL Documentation :一些mysql的官方文档。 windows x64和x86最主要的区别:windows x64是指64位的操作系统,windows x86是指32位的操作系统。所以如果你电脑拥有超过4G的内存,则建议安装64位的操作系统,这是这两者最大的区别. ③自定义安装路径 √首先点击MySQL Server-->advanced option-->设置MySQL Server安装路径 √之后点击Connector/Python-->advanced option-->设置Connector/Python安装路径 √ 之后点击MySQL Shell-->advanced option-->设置MySQL Shell安装路径 ④ready to download ⑤ready to install ⑥之后一直点击next即可,直至出现如下界面,需要设置数据库的密码(友情提示:最好找个地方记下来~) ⑦next即可【可根据个人意愿对服务名称进行修改】 ⑧点击execute ⑨完成 配置环境变量 为什么需要配置环境变量? 环境变量,代表系统的一个全局搜索路径。 当你没有配置环境变量的时候,你想要执行某个目录下的某个程序,就必须找到它的具体位置,才能够执行它。 当不配置环境变量,想要执行某个程序可以吗?当然也是可以的,就拿启动mysql来说,你如果不配置环境变量,就必须在CMD黑窗口中,使用cd命令切换到mysql server下的bin目录下,才可以执行启动。你每次这样启动是不是觉得很麻烦,当你需要经常使用mysql,需要经常执行mysql启动。这就是为什么我们需要配置环境变量的原因。 当配置了某个环境变量,如果你想要执行某个程序,你可以在任何路径下,执行这个程序。首先,系统会在当前目录下,搜索是否存在想要执行的某个程序,假如没有,系统会再去系统环境变量中的目录进行一个个搜索,当搜索到了该程序,便会立即执行。 将MySQL Server安装路径中的bin目录加入path即可。注意:结尾是英文封号 ———————————————— 原文链接:https://blog.csdn.net/weixin_54106682/article/details/128156632
-
本文深入介绍了RabbitMQ消息模型,涵盖了基本消息队列、工作消息队列、广播、路由和主题等五种常见消息模型。每种模型都具有独特的特点和适用场景,为开发者提供了灵活而强大的消息传递工具。通过这些模型,RabbitMQ实现了解耦、异步通信以及高效的消息路由,为分布式系统的开发和部署提供了可靠的基础。阅读本文,读者将深入了解RabbitMQ不同消息模型的应用场景和使用方法,为构建可靠的消息传递系统提供了有益的指导。 一、RabbitMQ消息模型介绍 RabbitMQ 是一种高度可扩展的消息代理,其消息模型基于 AMQP(Advanced Message Queuing Protocol)协议,提供了灵活可靠的消息传递机制。 以下是 RabbitMQ 的核心消息模型组成部分: 组成部分 功能 生产者 (Producer) 生产者负责产生和发送消息到 RabbitMQ 服务器。 将消息发布到特定的交换机(Exchange)。 交换机 (Exchange) 交换机是消息的分发中心,接收生产者发送的消息,并将其路由到一个或多个队列。RabbitMQ 提供不同类型的交换机,如直连交换机(direct)、主题交换机(topic)、扇出交换机(fanout)、头交换机(headers)等,以满足不同的路由需求。 队列 (Queue) 队列是消息的存储地点,消息在队列中等待被消费。 消息按照一定的规则存储在队列中,等待消费者订阅并处理。 绑定 (Binding) 绑定定义了交换机如何将消息路由到特定的队列。 绑定规则由消费者在订阅队列时指定,确保消息按照预期的方式路由。 消费者 (Consumer) 消费者订阅一个或多个队列,接收并处理队列中的消息。消费者从队列中获取消息,完成相应的业务逻辑,然后应答(acknowledge)消息。 路由键 (Routing Key) 路由键是消息从生产者到达交换机时的附加信息,用于指导消息路由到特定的队列。路由键的值与交换机类型和绑定规则相关。 RabbitMQ 的消息模型允许灵活的消息路由和传递,提供了高度可靠性和可伸缩性。生产者通过交换机将消息发送到队列,而消费者则订阅队列并处理消息。这种模型使得系统能够实现解耦、异步通信,同时确保消息在分布式环境中的可靠传递。 二、RabbitMQ常见消息模型 MQ(消息队列)在应用中有多种常见的消息模型,其中包括以下五种: 1、基本消息队列 基本消息队(Basic Queue) 列是最简单的消息传递模型。在这个模型中,生产者发送包含简单信息如 "Hello World!" 的消息到队列,而消费者则接收并处理这些消息。这种模型适用于简单的场景,如需要一对一通信的情况。 示意图: 2、工作消息队列 工作消息队列(Work Queue)用于在多个工作者(消费者)之间分发任务。生产者将任务发送到队列,多个工作者可以并发地处理这些任务。这种模型有效地实现了任务的分发和并行处理。 示意图: 3、发布订阅 发布订阅(Publish/Subscribe) 模型采用广播方式,生产者将消息发送到交换机,多个队列通过订阅交换机接收消息,实现一对多的消息传递。 根据交换机类型不同,发布订阅模型又分为三种: ① 广播交换机(Fanout Exchange) 广播交换机(Fanout Exchange)是一种简单而强大的消息传递模型。当生产者发送消息到Fanout Exchange时,该交换机会将消息广播到所有与之绑定的队列,无论它们的路由键是什么。这使得多个队列能够同时接收相同的消息,实现了一对多的消息传递 示意图: ② 直连交换机(Direct Exchange) 直连交换机(Direct Exchange)通过使用指定的路由键,将消息传递到与之匹配的队列。这种模型适用于需要将消息精确路由到特定队列的场景。生产者发送消息时,可以指定一个或多个路由键,而队列在绑定交换机时也需要指定相应的路由键,从而实现精准的消息路由。 示意图: ③ 主题交换机(Topic) 主题交换机(Topic Exchange)允许消息的路由键与队列的绑定模式进行模糊匹配,从而实现更灵活的消息订阅和路由。路由键可以使用通配符(和#),其中星号()代表一个单词,井号(#)代表零个或多个单词。这种模型使得队列能够订阅符合特定模式的消息,而不仅仅是固定的路由键。 示意图: 这五种消息模型展示了RabbitMQ在不同场景下的应用,为开发者提供了多样的选择,以满足各种消息传递需求。 三、RabbitMQ消息模型总结 RabbitMQ作为高度可扩展的消息代理,其消息模型基于AMQP协议,提供了强大的消息传递机制。核心组成部分包括生产者、交换机、队列、绑定和消费者等。消息模型允许实现灵活的消息路由和传递,提供了高度可靠性和可伸缩性。通过交换机将消息发送到队列,消费者订阅队列并处理消息,实现了解耦、异步通信,确保消息在分布式环境中的可靠传递。 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/weixin_41793160/article/details/136466366
-
1.0 MySQL 说明 MySQL 是一种关系型数据库管理系统,它支持使用 SQL(Structured Query Language)来管理和操作数据库。SQL 是一种标准化的数据库查询语言,包括 DDL、DML、DQL、DCL 和 TCL等不同类型的语句。 2.0 DDL 语言 DDL 是数据定义语言(Data Definition Language)的缩写,是一种用于定义数据库结构和模式的语言。DDL 包括创建、修改和删除数据库表、视图、索引等数据库对象的语句。常见的 DDL 语句包括 CREATE、ALTER 和 DROP 等。因此,DDL 不是一种独立的编程语言,而是用于管理数据库结构的语言。简单来说, DDL 就是对数据库、表进行增加、删除、查询、修改。 2.1 DDL 语言 - 定义数据库 用 DDL 语言来对数据库的操作主要有一下四点:创建数据库、查询当前的数据库、使用指定的数据库、删除数据库。 2.1.1 创建数据库操作 创建数据库的 SQL 语句为: create database [ if not exists ] 数据库名; 对于 [ if not exists ] ,翻译为:"如果改数据库不存在" 。这段代码可写可不写,没有强制要求。主要区别是,若没有加上这段代码且存在该数据库,则会报错;若加上这段代码且存在该数据库。则不会报错。 已知已经存在 db01 这个数据库了,通过 create database db01; 再来创建时,会报错。如果加上 if not exists ,那么及时创建相同的数据库也不会报错,当然也不可能创建一个一摸一样的数据库。 2.1.2 查看数据库操作 查看全部数据库的 SQL 语句: show databases; 需要注意的是,这里的 databases 记得加上 s 且该后面结尾加上 ";" 。 查看的结果为: 在红色框里面的数据库是 MySQL 自带的数据库,万万不可对这四个数据库进行任何危险操作。否则 MySQL 出现问题,需要重新安装了。 除了这个查看全部数据库操作之外,还有查看当前使用数据库操作。 查看当前数据库的 SQL 语句: select database(); 这里的 database 是没有加上 s 的且注意是加上 () 。 操作结果为: 当前使用的数据库为 db01 。 2.1.3 使用数据库操作 使用数据库的 SQL 语句: use 数据库名; 简单来说,就是选择指点的数据库。 操作结果为: 2.1.4 删除数据库操作 删除数据库的 SQL 语句: drop database if exists 数据库名; 若存在该数据库,删除不会报错;如果没有加上 if exists 这段代码,那么当不存在该数据库而要删除该数据库时,会报错。 操作结果为: 删除该数据库后,查看全部数据时,不存在 db01 这个库了。显然是删除成功了。 2.2 DDL 语言 - 定义表格 在对表进行操作之前,需要先选择数据库。DDL 来定义表格的操作有:创建表格、查询表格、修改表格、删除表格。 2.2.1 创建表格操作 1)在创建表格之前,先来简单了解约束 约束概念:约束是作用与表中字段上的规则,用于限制存储在表中的数据。 约束目的:保证数据中数据的正确性、有效性和完整性。 约束类型如下: 2)在创建表格之前,再来简单了解数据类型 数据类型可以简单理解为,该字段需要存储空间的大小。总共分为三大类:数值类型、字符串类型、日期时间类型。 数值类型如图: 字符串常见类型如图: 两者区别:举例子 char(10) 与 varchar(10) ,对于 char(10) 来说,不管空间是否占满,都要消耗 10 个字节大小的空间。而对于 varchar(10) 来说,若空间没有占满 10 个字节大小,就会按照消耗实际存储空间大小。 日期时间类型如图: 3)创建表格的 SQL 语句: create table 表名( 字段 1 字段类型 [约束] [ comment 字段1注释 ], ...... 字段 n 字段类型 [约束] [ comment 字段n注释] ) [comment 表注释]; 实际例子演示: create table tb_user( id tinyint unsigned auto_increment primary key comment '唯一标识', username varchar(20) not null unique comment '用户名', name varchar(20) not null comment '名字', age tinyint unsigned comment '年龄', gender char(1) default '男' comment '性别,默认为男性' )comment '用户表'; 操作结果为: 这就可以得到一个表格。之后就可以在表格中添加数据了。 2.2.2 查询表格操作 查询当前该数据库中的全部表的 SQL 语句: -- 查看表 show tables; 操作结果为: 查询该表的结构的 SQL 语句: -- 查看表的结构 desc 表名; 操作结果为: 注意查询两者的区别:一个是查询所有的表、另一个是查询指定表的结构。 2.2.3 删除表格操作 删除表格的 SQL 语句为: -- 删除表 drop table 表名; 2.2.4 修改表格操作 1)添加字段的 SQL 语句: alter table 表名 add 字段名 类型 [约束]; 2)修改字段类型的 SQL 语句: alter table 表名 modify 字段名 新数据类型; 3)修改字段名和字段类型的 SQL 语句: alter table 表名 change 旧字段名 新字段名 类型 [约束]; 4)删除字段的 SQL 语句: alter table 表名 drop column 字段名; 5)修改表名的 SQL 语句: rename table 旧表名 to 新表名; 结合以上操作举个修改例子: -- 增加表中的列 alter table tb_user add qq char(10) comment 'QQ号'; -- 修改字段类型 alter table tb_user modify qq char(22); -- 修改字段名和字段类型 alter table tb_user change qq qq_name char(20); -- 删除表中的指定的字段 alter table tb_user drop column qq_name; -- 修改表中的名字 rename table tb_user to tb_user2; rename table tb_user2 to tb_user; ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/Tingfeng__/article/details/136288617
-
事务日志文件(Transaction Log File)是用来记录数据库更新情况的文件,扩展名为ldf。当出现以下情况时,就会报“事务日志已满”的错误: 日志文件没有设置了自动增长,当记录超过初始大小; 日志文件设置了自动增长,“最大文件大小”设置了具体的大小(如2000M),当文件达到设置的大小时。 解决SQL Server数据库事务日志已满的方法 要解决事务日志已满的问题,可以采用以下三种方法,截断日志、收缩日志文件以及修改数据库恢复模式. 修改数据库恢复模式 将数据库恢复模式从“完整模式”或“大容量日志恢复模式”更改为“简单模式”可以解决SQL Server数据库事务日志已满问题。但是,请注意这种方法可能会导致数据丢失。以下是修改数据库恢复模式的步骤: 1. 在 SQL Server Management Studio 中,右键单击数据库,选择“属性”。 2. 在“选项”中,将“恢复模式”设置为“简单”,然后点击“确定” 3. 在 SQL Server Management Studio 中,右键单击数据库,选择“任务”->“备份”。 4. 在“备份类型”中,选择“日志”,点击“确定”。 截断日志 截断日志是解决SQL Server数据库事务日志已满问题的较简单方法。通过截断日志,可以清除日志文件中的旧数据,从而释放空间。 在对象资源管理器中,连接到 SQL Server 数据库引擎的实例,然后展开该实例。 展开“数据库”,再右键单击要截断日志的数据库。 指向“任务”,指向“收缩”,然后选择“文件”。 选择文件的文件类型。可用的选项包括“数据”和“日志”文件。默认选项为“数据”。 在与以上所选的“文件类型”相关联的文件组列表中选择文件组。 从所选文件组和文件类型的可用文件列表中选择文件。 选中“释放未使用的空间”选项,将为操作系统释放文件中所有未用空间,并尝试将行重新定位到未分配页。 根据需要,输入在收缩数据库后数据库文件中要保留的最大可用空间百分比。值可以介于 0 和 99 之间。 请注意,在收缩日志文件之前,需要将数据库的恢复模式更改为简单模式。此外,收缩日志文件的步骤与截断日志文件的步骤类似,但是收缩日志文件会将日志文件的大小缩小到指定的大小,而截断日志文件只是删除不活动的虚拟日志文件以释放空间。 总之,使用 SQL Server Management Studio 截断日志的方法包括连接到 SQL Server 数据库引擎的实例,展开“数据库”,右键单击要截断日志的数据库,指向“任务”,指向“收缩”,然后选择“文件”。请注意,在执行截断操作之前,应该备份数据库以防止数据丢失。 收缩日志文件 收缩日志文件是另一种解决SQL Server数据库事务日志已满问题的方法。通过收缩日志文件,可以压缩日志文件的大小,从而释放空间。 在 SQL Server 中,可以使用 SQL Server Management Studio 或 Transact-SQL 来收缩数据或日志文件。以下是使用 SQL Server Management Studio 收缩日志文件的步骤: 在对象资源管理器中,连接到 SQL Server 数据库引擎的实例,然后展开该实例。 展开“数据库”,再右键单击要收缩的数据库。 指向“任务”,指向“收缩”,然后选择“文件”。 选择文件的文件类型。可用的选项包括“数据”和“日志”文件。默认选项为“数据”。 在与以上所选的“文件类型”相关联的文件组列表中选择文件组。 从所选文件组和文件类型的可用文件列表中选择文件。 选中“释放未使用的空间”选项,将为操作系统释放文件中所有未用空间,并尝试将行重新定位到未分配页。 根据需要,输入在收缩数据库后数据库文件中要保留的最大可用空间百分比。值可以介于 0 和 99 之间。 请注意,收缩日志文件的步骤与收缩数据文件的步骤略有不同。在收缩日志文件之前,需要将数据库的恢复模式更改为简单模式。以下是使用 Transact-SQL 收缩日志文件的步骤: 将数据库的恢复模式更改为简单模式。 截断事务日志。 收缩日志文件。 具体的 Transact-SQL 命令如下: -- 将数据库的恢复模式更改为简单模式 ALTER DATABASE database_name SET RECOVERY SIMPLE; -- 截断事务日志 BACKUP LOG database_name WITH TRUNCATE_ONLY; -- 收缩日志文件 DBCC SHRINKFILE (file_name, target_size); 其中,file_name 是要收缩的日志文件的逻辑名称,target_size 是要收缩到的目标大小。 总之,收缩日志文件的步骤包括将数据库的恢复模式更改为简单模式、截断事务日志、收缩日志文件。请注意,在执行收缩操作之前,应该备份数据库以防止数据丢失。 使用傲梅企业备份网络版软件备份 SQL Server 数据库并解决事务日志已满问题 如果您的 SQL Server 数据库事务日志已满,并且您正在使用 SSMS 解决该问题,您也可以考虑使用傲梅企业备份网络版软件来备份数据库。傲梅企业备份网络版提供了以下功能: ◉ 提供系统/磁盘/分区/文件备份,助您创建集中备份对于 LAN 内的所有客户端。它还提供 SQL Server 备份,用于在一台 PC/服务器上备份多个实例。 ◉ 它使您能够使用计划功能创建自动备份任务。有四种可用的计划模式:一次、每日、每周和每月。 ◉ 支持SQL Server 2019/2017/2016/2014/2012/2008(R2)/2005数据库备份。 ◉ 它可以安装在Windows Server(Windows Server 2019/2016/2012/2011/2008/2003等)和Windows PC(Windows 10/8.1/8/7/Vista/XP)上。 使用傲梅企业备份网络版软件备份 SQL Server 数据库可以帮助您解决事务日志已满的问题。下面是使用傲梅企业备份网络版备份 SQL Server 数据库的步骤: 1. 在局域网内的其中一台计算机上安装傲梅企业备份网络版作为中央管理计算机。 2.安装客户端程序 启动傲梅企业备份网络版 并转到 "计算机" > "未控制的计算机" > "安装客户端"。您将看到如下两个选项: 客户端手动安装:点击“下一步”即可得到客户端程序安装文件。将安装文件复制到装有 SQL Server 的计算机上,并以管理员身份运行它以安装傲梅企业备份网络版 Agent。 远程客户端安装:点击“下一步”,您将拥有局域网内所有可用的计算机。选择装有SQL Server 的计算机,输入它的用户名和密码,然后单击“安装”。 3.请求控制 3.1. 如果您手动安装了客户端程序,客户端计算机将列在 "计算机" > “未控制的计算机”下。勾选装有SQL Server的电脑,点击 “请求控制” 获取控制权限。 提供了两种方法: 输入账号:输入客户端的用户名和密码,点击“确定”。 通过发送消息:程序将向客户端计算机发送消息。在客户端计算机上单击“同意”以授权访问。 3.2. 如果您远程安装了客户端程序,客户端计算机将列在 "计算机" > “已控制的计算机”下。在这种情况下,您无需请求控制权。 现在您可以通过 傲梅企业备份网络版每天执行SQL Server自动备份,步骤如下: 1. 转到 “任务” 选项卡,单击 “新建任务” 并选择 “SQL Server 备份”。 2. 在弹出窗口中,根据需要编辑任务名称。然后, 在“第一步”栏中点击 “添加计算机” ,选择带有SQL Server数据库的受控计算机。 3. 单击“步骤 2”列,然后单击“添加”。该程序将检测计算机上的所有 SQL Server 实例。选择要备份的实例和数据库,然后单击“确定”。 4. 单击“第 3 步”列,然后单击“添加存储”。键入网络共享或 NAS 路径以添加目标位置以存储备份文件。 5. 单击左下角的“计划并选择您要为其创建计划的计算机”。在“日程设置”窗口的下拉列表中选择“每天” ,完成相应的设置。您还可以通过单击“高级”选择运行完整/差异备份。 6. 确认操作,点击 “开始备份”。您可以在此处选择“仅创建任务”或“创建并执行任务”。 结论 以上是解决 SQL Server数据库事务日志已满问题的多种方法。截断日志和收缩日志文件是较为简单的方法,但可能会导致数据丢失。修改数据库恢复模式可以解决问题,但也可能会导致数据丢失。使用傲梅企业备份网络版软件备份 SQL Server 数据库是最安全的方法,可以保证数据的完整性。 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_41497074/article/details/131675312
-
多表查询 指的是从多张表中查询数据 首先准备好需要查询的数据表 - dept表 和 emp表 -- 准备数据 create table dept( id int auto_increment comment 'ID' primary key , name varchar(50) not null comment '部门名称' )comment '部门表'; insert into dept(id, name) VALUES (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办'),(6,'人事部'); create table emp( id int auto_increment comment 'ID' primary key , name varchar(50) not null comment '姓名', age int comment '年龄', job varchar(20) comment '职位', salary int comment '薪资', entrydate date comment '入职时间', managerid int comment '直属领导ID', dept_id int comment '部门ID' )comment '员工表'; insert into emp (id, name, age, job, salary, entrydate, managerid, dept_id) VALUES (1,'金庸',66,'总裁',2000,'2000-01-01',null,5),(2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1), (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1), (5,'常遇春',43,'开发',10500,'2004-09-07',3,1),(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1), (7,'灭绝',60,'财务总监',8500,'2002-09-12',1,3),(8,'周芷若',19,'会计',48000,'2006-06-02',7,3), (9,'丁敏君',23,'出纳',5250,'2009-05-13',7,3),(10,'赵敏',20,'市场部总监',12500,'2004-10-12',1,2), (11,'鹿杖客',56,'职员',3750,'2006-10-03',10,2),(12,'鹤笔翁',19,'职员',3750,'2007-05-09',10,2), (13,'方东白',19,'职员',5500,'2009-02-12',10,2),(14,'张三丰',88,'销售总监',14000,'2004-10-12',14,4), (15,'俞莲舟',38,'销售',4600,'2004-10-12',14,4),(16,'宋远桥',40,'销售',4600,'2004-10-12',14,4), (17,'陈友谅',42,null,2000,'2011-10-12',1,null); -- 添加外键将两张表进行关联 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id); -- 多表查询 - 笛卡尔积 select * from emp , dept ; 笛卡尔积:笛卡尔乘积是指在数学中,两个集合 A 集合和 B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)—>17*6 = 102 所以我们可以看到102条记录 如何消除无效的笛卡尔积? 我们可以通过emp表中的外键和dept的id建立连接,我们只需要在原来基础上加上条件即可 -- 多表查询 - 通过where添加条件,消除无效的笛卡尔积 select * from emp , dept where emp.dept_id = dept.id ; 通过控制台运行结果我们可以发现我们明明有17个员工而查询到的结果只有16条,这是为什么呢? 这是因为我们的陈友谅这个员工是刚来的员工还没有给他分配部门。👇 多表查询分类 连接查询 内连接: 相当于查询A、B交集部分数据 外连接: 左外连接:查询 左表 所有数据,以及两张表交集部分数据 右外连接:查询 右表 所有数据,以及两张表交集部分数据 自连接: 当前表与自身的连接查询,自连接必须使用表别名。 字查询 原文链接:https://blog.csdn.net/Aileenvov/article/details/136153617
-
在做项目的过程中,遇到了中文乱码问题,该如何处理?(比如网站主页查询页面显示乱码)可以从页面,程序,以及数据库三个方面去查看问题的原因所在,主页面显示中文乱码,无外乎是因为从数据库中取出来的数据传输到主页面的过程中出现了编码问题,那么就应该从这三个方面去查找问题的所在。因为我们常用UTF-8的编码格式,所以我们就检查所有数据的编码是否都是UTF-8编码。1. 查看一下页面jsp文件的编码格式(1.3.1/1.3.2)1.1、项目文本文件默认编码:【右击项目】->【Properties】->【Resource】->【Text file encoding】1.2、文件默认编码:默认使用项目的默认编码【右击文件】->【Properties】->【Resource】->【Text file encoding】1.3、JSP文件编码:由于JSP要翻译为Servlet1.3.1、JSP文件编码:【右击文件】->【Properties】->【Resource】->【Text file encoding】1.3.2、JSP翻译为Servlet时的编码: (此项可以由1.1,1.2,1.3.1代替)<%@ page language="java" pageEncoding="utf-8"%>1.3.3、从服务器将jsp内容输出到浏览器<%@page contentType="text/html;charset=utf-8"%>在这次输出过程中,由contentType属性中的charset来指定,将servlet编译后的的二进制码以charset的编码形式来输出。2. 服务器端编码设置服务器端编码,将客户端传过来的数据进行解码:浏览器默认使用ISO-8859-1进行编码数据,然后将数据传输到服务器,因此我们默认只需要将浏览器发送过来的数据转换为我们需要的编码即可。GET请求方式:2.1 TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在conf\server.xml文件中设置如下<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding=”UTF-8”/>2.2String username = request.getParameter(“username”);username = new String(username.getBytes("ISO-8859-1“), "UTF-8"); POST请求方式:2.3 // 必须在获取参数之前,调用如下方法先解码request.setCharacterEncoding(“UTF-8”);String username = request.getParameter(“username”);response.setContentType("text/html;charset=utf-8");3.数据库的编码设置 3.1 JDBC连接数据库的编码设置 "jdbc:mysql://localhost:3306/jd1203db?useUnicode=true&characterEncoding=utf8","root","1234"); 3.2 在建表或者建数据库时可以加上: create database jsd1203db ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.3查看MySql数据中当前联接系统参数 show variables like 'char%',显示各个编码类型。 可以show create database dangdang;通过该语句查看建库的语句,看是否有设置编码。 如果各种编码都是对的,可是在数据库中查看数据时是乱码,可以用set names ‘gbk’,设置查看编码为gbk,与系统一致(windows)。 注意,这个设置只对当前会话有效。
-
现在大部分应用选择使用 PostgreSQL(常称为 pgsql)而不是 MySQL 的原因有多个,这些原因可能因具体的应用场景、技术要求和团队偏好而异。以下是一些可能的原因:功能特性:扩展性:PostgreSQL 支持更多的数据类型、函数和操作符,允许开发者构建更复杂的应用。事务处理:PostgreSQL 支持更复杂的 ACID 事务模型,对于需要高度一致性和可靠性的应用来说是一个优势。JSON 支持:PostgreSQL 提供了对 JSON 数据的原生支持,这对于存储和查询 JSON 格式的数据非常方便。性能:查询性能:在某些复杂查询和大数据量的情况下,PostgreSQL 可能提供比 MySQL 更好的性能。并行查询:PostgreSQL 支持并行查询,这有助于加速大数据集的处理。标准和兼容性:SQL 标准:PostgreSQL 更接近于 SQL 标准,这有助于跨数据库系统的兼容性。开源社区:虽然 MySQL 也有庞大的开源社区,但 PostgreSQL 社区在某些方面可能更活跃,这有助于解决技术问题。可靠性:数据完整性:PostgreSQL 提供了更强大的数据完整性检查和恢复功能。故障恢复:PostgreSQL 的故障恢复机制也被认为比 MySQL 更健壮。安全性:加密和身份验证:PostgreSQL 提供了更强大的加密和身份验证功能,有助于保护数据安全。行级安全性:PostgreSQL 支持行级安全性,允许开发者更精细地控制数据的访问权限。其他:复制和集群:PostgreSQL 提供了强大的复制和集群功能,有助于构建高可用性和可扩展性的应用。历史和技术债务:某些团队可能因历史项目或技术债务而选择 PostgreSQL,而不是 MySQL。需要注意的是,选择数据库系统是一个复杂的过程,需要考虑多种因素,如技术需求、团队经验、社区支持、成本等。因此,并没有一个“一刀切”的答案,每个项目都应该根据具体情况进行评估和选择。
-
在数据库操作中,我们常常遇到需要将数据去重计数的工作。例如:表A,列colACABCDAB结果就是一共出现4个不同的字母A、B、C、D即结果为4大体上我们可以选择count(distinct col)的方法和group+count的方法。分别为:select count(distinct col) from A;select count(1) from (select 1 from A group by col) alias;两中方法实现有什么不同呢?其实上述两中方法分别是在运算和存储上的权衡。distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。很明显,需要将所有不同的值都存起来。内存消耗可能较大。而group by的方式是先将col排序。而数据库中的group一般使用sort的方法,即数据库会先对col进行排序。而排序的基本理论是,时间复杂为nlogn,空间为1.,然后只要单纯的计数就可以了。优点是空间复杂度小,缺点是要进行一次排序,执行时间会较长。两中方法各有优劣,在使用的时候,我们需要根据实际情况进行取舍。具体情况可参考如下法则数据分布去重方式原因离散groupdistinct空间占用较大,在时间复杂度允许的情况下,group 可以发挥空间复杂度优势集中distinctdistinct空间占用较小,可以发挥时间复杂度优势两个极端:1.数据列的所有数据都一样,即去重计数的结果为1时,用distinct最佳2.如果数据列唯一,没有相同数值,用group 最好当然,在group by时,某些数据库产品会根据数据列的情况智能地选择是使用排序去重还是hash去重,例如postgresql。当然,我们可以根据实际情况对执行计划进行人工的干预,而这不是这里要讨论的话题了。原文:https://blog.csdn.net/qq_40026782/article/details/83416317?spm=1001.2014.3001.5502
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签