What is MySQL multi-instance
Advantages and disadvantages of MySQL multiple instances:1. Effectively utilize server resources: When a single server has spare resources, you can make full use of the remaining resources to create more MySQL instances to provide more services. 2. Save server resources: When a company is short of funds, but needs multiple databases and each needs to provide services as independently as possible or requires master-slave synchronization, MySQL multiple instances are perfect. 3. Resource competition problem: When a service instance has high concurrency or slow queries, the entire instance will consume more memory, CPU, disk, and IO resources, resulting in a decrease in the quality of services provided by other instances on the server. This is equivalent to when people in different bedrooms (MySQL instances) of a house need to go to the toilet (hardware CPU, memory, and disk IO resources), one person occupies the toilet and everyone else has to wait. MySQL multi-instance installation guide:For details, please refer to the official website (https://dev.mysql.com/doc/refman/5.7/en/installing.html)
Prepare the environment. [root@mysql-multi ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@mysql-multi ~]# uname -r 3.10.0-862.el7.x86_64 [root@mysql-multi ~]# hostname -I 172.16.70.37 [root@mysql-multi ~]# getenforce Permissive [root@mysql-multi ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) Jul 23 14:36:11 mysql-multi systemd[1]: Starting firewalld - dynamic firewall daemon... Jul 23 14:36:12 mysql-multi systemd[1]: Started firewalld - dynamic firewall daemon. Jul 23 15:09:10 mysql-multi systemd[1]: Stopping firewalld - dynamic firewall daemon... Jul 23 15:09:11 mysql-multi systemd[1]: Stopped firewalld - dynamic firewall daemon. # The CentOS 7 version of the system comes with MariaDB installed by default, so you need to clean it up first [root@mysql-multi ~]# rpm -qa |grep mariadb mariadb-libs-5.5.56-2.el7.x86_64 or [root@mysql-multi ~]# yum list installed | grep mariadb mariadb-libs.x86_64 1:5.5.56-2.el7 @anaconda # Uninstall [root@mysql-multi ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 Or [root@mysql-multi ~]# yum -y remove mariadb-libs.x86_64 Install and configure MySQL multiple instancesThe YUM source installation method is as follows: Download the rpm package from the official website: https://downloads.mysql.com/archives/community, and choose to download the appropriate version. # Upload the rpm package to the server [root@mysql-multi ~]# yum install libaio lrzsz tree net-tools -y [root@mysql-multi ~]# ls mysql-community-client-5.7.34-1.el7.x86_64.rpm mysql-community-libs-5.7.34-1.el7.x86_64.rpm mysql-community-common-5.7.34-1.el7.x86_64.rpm mysql-community-server-5.7.34-1.el7.x86_64.rpm # The installation operations must be performed in order [root@mysql-multi ~]# rpm -ivh mysql-community-common-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-libs-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-client-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-server-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# yum list installed | grep mysql mysql-community-client.x86_64 5.7.34-1.el7 installed mysql-community-common.x86_64 5.7.34-1.el7 installed mysql-community-libs.x86_64 5.7.34-1.el7 installed mysql-community-server.x86_64 5.7.34-1.el7 installed # Create instance directory [root@mysql-multi ~]# mkdir -p /data/app/mysql/{3306,3307} [root@mysql-multi ~]# mkdir -p /data/app/mysql/3306/{data,binlog,logs} [root@mysql-multi ~]# mkdir -p /data/app/mysql/3307/{data,binlog,logs} [root@mysql-multi ~]# tree /data/app/mysql/ /data/app/mysql/ ├── 3306 │ ├── binlog │ ├── data │ └── logs └── 3307 ├── binlog ├── data └── logs # Set the directory owner group [root@mysql-multi ~]# chown -R mysql:mysql /data/app/mysql [root@mysql-multi ~]# ls -ld /data/app/mysql drwxr-xr-x. 4 mysql mysql 30 Jul 29 18:39 /data/app/mysql [root@mysql-multi ~]# ls -ld /data/app drwxr-xr-x. 3 root root 19 Jul 29 18:39 /data/app # Add a new configuration file my3306.cnf [root@mysql-multi ~]# mv /etc/my.cnf /etc/my.cnf_bak [root@mysql-multi ~]# cat /etc/my3306.cnf [mysqld] user = mysql port = 3306 server_id = 3306 datadir = /data/app/mysql/3306/data socket = /data/app/mysql/3306/mysql3306.sock symbolic-links = 0 log-error = /data/app/mysql/3306/logs/mysqld3306.log pid-file = /data/app/mysql/3306/mysqld3306.pid # Add a new configuration file my3307.cnf [root@mysql-multi ~]# cp /etc/my3306.cnf /etc/my3307.cnf [root@mysql-multi ~]# sed -i 's/3306/3307/g' /etc/my3307.cnf [root@mysql-multi ~]# cat /etc/my3307.cnf [mysqld] user = mysql port = 3307 server_id = 3307 datadir = /data/app/mysql/3307/data socket = /data/app/mysql/3307/mysql3307.sock symbolic-links = 0 log-error = /data/app/mysql/3307/logs/mysqld3307.log pid-file = /data/app/mysql/3307/mysqld3307.pid # Back up mysql startup service file [root@mysql-multi ~]# mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak # Add mysqld3306.service startup file [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3306.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=/data/app/mysql/3306/mysqld3306.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3306 3306 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # Add mysqld3307.service startup file [root@mysql-multi ~]# cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# sed -i 's/3306/3307/g' /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3307.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=/data/app/mysql/3307/mysqld3307.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3307 3307 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # Initialize multiple instances 3306, 3307 [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3306.cnf --initialize --user=mysql --datadir=/data/app/mysql/3306/data [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3307.cnf --initialize --user=mysql --datadir=/data/app/mysql/3307/data # Start multiple instances 3306, 3307 [root@mysql-multi ~]# systemctl start mysqld3306 [root@mysql-multi ~]# systemctl start mysqld3307 [root@mysql-multi ~]# netstat -nutpl | grep mysql tcp6 0 0 :::3306 :::* LISTEN 128270/mysqld tcp6 0 0 :::3307 :::* LISTEN 128328/mysqld [root@mysql-multi ~]# ps -ef | grep mysql mysql 128270 1 1 11:43 ? 00:00:00 /usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid mysql 128328 1 1 11:43 ? 00:00:00 /usr/sbin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid root 128373 949 0 11:43 pts/0 00:00:00 grep --color=auto mysql =========================================== 【Add another MySQL instance】====================================================================== # Create a directory and set the owner and group [root@mysql-multi ~]# mkdir -p /data/app/mysql/3308/{data,binlog,logs} [root@mysql-multi ~]# chown -R mysql:mysql /data/app/mysql/3308 [root@mysql-multi ~]# ls -ld /data/app/mysql/3308 drwxr-xr-x. 5 mysql mysql 44 Aug 5 14:45 /data/app/mysql/3308 # Add a new configuration file my3308.cnf [root@mysql-multi ~]# cp /etc/my3306.cnf /etc/my3308.cnf [root@mysql-multi ~]# sed -i 's/3306/3308/g' /etc/my3308.cnf [root@mysql-multi ~]# cat /etc/my3308.cnf [mysqld] user = mysql port = 3308 server_id = 3308 datadir = /data/app/mysql/3308/data socket = /data/app/mysql/3308/mysql3308.sock symbolic-links = 0 log-error = /data/app/mysql/3308/logs/mysqld3308.log pid-file = /data/app/mysql/3308/mysqld3308.pid # Add mysqld3308.service startup file [root@mysql-multi ~]# cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3308.service [root@mysql-multi ~]# sed -i 's/3306/3308/g' /usr/lib/systemd/system/mysqld3308.service [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3308.service [Unit] Description=MySQL Server 3308 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=/data/app/mysql/3308/mysqld3308.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3308 3308 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3308.cnf --daemonize --pid-file=/data/app/mysql/3308/mysqld3308.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # Initialize multiple instances 3308 [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3308.cnf --initialize --user=mysql --datadir=/data/app/mysql/3308/data # Start multiple instances 3308 [root@mysql-multi ~]# systemctl start mysqld3308 [root@mysql-multi ~]# netstat -nutpl | grep mysql tcp6 0 0 :::3306 :::* LISTEN 5062/mysqld tcp6 0 0 :::3307 :::* LISTEN 5098/mysqld tcp6 0 0 :::3308 :::* LISTEN 5189/mysqld [root@mysql-multi ~]# ps -ef |grep mysql mysql 5062 1 0 14:43 ? 00:00:01 /usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid mysql 5098 1 0 14:44 ? 00:00:01 /usr/sbin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid mysql 5189 1 4 14:57 ? 00:00:01 /usr/sbin/mysqld --defaults-file=/etc/my3308.cnf --daemonize --pid-file=/data/app/mysql/3308/mysqld3308.pid The source code compilation and installation method is as follows: MySQL download: https://downloads.mysql.com/archives/community Boost download: https://sourceforge.net/projects/boost/files/boost/1.59.0 MySQL multiple instances: https://dev.mysql.com/doc/refman/5.7/en/multiple-servers.html # Dependency packages and compilation software [root@mysql-multi ~]# yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel libaio-devel wget lrzsz tree [root@mysql-multi ~]# rpm -qa ncurses-devel libaio-devel libaio-devel-0.3.109-13.el7.x86_64 ncurses-devel-5.9-14.20130511.el7_4.x86_64 # Download and upload the source code package and decompress it, compile and install it (preferably with memory > 8G) ls[root@mysql-multi ~]# ls boost_1_59_0.tar.gz mysql-boost-5.7.34.tar.gz [root@mysql-multi ~]# tar xf boost_1_59_0.tar.gz [root@mysql-multi ~]# tar xf mysql-boost-5.7.34.tar.gz [root@mysql-multi ~]# ls boost_1_59_0 boost_1_59_0.tar.gz mysql-5.7.34 mysql-boost-5.7.34.tar.gz [root@mysql-multi ~]# cd mysql-5.7.34/ [root@mysql-multi mysql-5.7.34]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8mb4 \ -DENABLED_LOCAL_INFILE=1 -DWITH_SYSTEMD=1 -DWITH_BOOST=/root/boost_1_59_0 -DEXTRA_CHARSETS=all ...... ......If the following is displayed at the end, it is completed-- CMAKE_SHARED_LINKER_FLAGS -- Configuring done -- Generating done -- Build files have been written to: /root/mysql-5.7.34 Option description: -DCMAKE_INSTALL_PREFIX=/usr/local/mysql # mysql installation directory -DDEFAULT_CHARSET=utf8mb4 # Database default character encoding -DENABLED_LOCAL_INFILE=1 # Allow data to be imported from this file -DWITH_SYSTEMD=1 # Provide systemd script -DWITH_BOOST=/root/boost_1_59_0 # boost source path -DEXTRA_CHARSETS=all # Install all character sets [root@mysql-multi mysql-5.7.34]#make -j 4 && make install # make -j 4 means compiling with CPU4 cores at the same time: cat /proc/cpuinfo|grep "processor"|wc -l ...... ......If the following content is displayed at the end, it is completed-- Up-to-date: /usr/local/app/mysql/mysql-test/mysql-test-run -- Installing: /usr/local/app/mysql/mysql-test/lib/My/SafeProcess/my_safe_process -- Up-to-date: /usr/local/app/mysql/mysql-test/lib/My/SafeProcess/my_safe_process -- Installing: /usr/local/app/mysql/mysql-test/lib/My/SafeProcess/Base.pm -- Installing: /usr/local/app/mysql/support-files/mysqld_multi.server -- Installing: /usr/local/app/mysql/support-files/mysql-log-rotate -- Installing: /usr/local/app/mysql/support-files/magic -- Installing: /usr/local/app/mysql/share/aclocal/mysql.m4 -- Installing: /usr/local/app/mysql/support-files/mysql.server # Create instance directory [root@mysql-multi ~]# mkdir -p /data/app/mysql/{3306,3307}/{data,binlog,logs} [root@mysql-multi ~]# tree /data/app/mysql /data/app/mysql ├── 3306 │ ├── binlog │ ├── data │ └── logs └── 3307 ├── binlog ├── data └── logs # Create a user and set the directory owner group [root@mysql-multi ~]# useradd -M -r -s /sbin/nologin mysql [root@mysql-multi ~]# chown -R mysql:mysql /data/app/mysql [root@mysql-multi ~]# ls -ld /data/app/mysql drwxr-xr-x. 4 mysql mysql 30 Aug 5 12:17 /data/app/mysql # Add a new configuration file my3306.cnf [root@mysql-multi ~]# mv /etc/my.cnf /etc/my.cnf_bak [root@mysql-multi ~]# cat /etc/my3306.cnf [mysqld] user = mysql port = 3306 server_id = 3306 basedir = /usr/local/mysql datadir = /data/app/mysql/3306/data socket = /data/app/mysql/3306/mysql3306.sock symbolic-links = 0 log-error = /data/app/mysql/3306/logs/mysqld3306.log pid-file = /data/app/mysql/3306/mysqld3306.pid character_set_server = utf8 default-storage-engine = INNODB # Add a new configuration file my3307.cnf [root@mysql-multi ~]# cp /etc/my3306.cnf /etc/my3307.cnf [root@mysql-multi ~]# sed -i 's/3306/3307/g' /etc/my3307.cnf [root@mysql-multi ~]# cat /etc/my3307.cnf [mysqld] user = mysql port = 3307 server_id = 3307 basedir = /usr/local/mysql datadir = /data/app/mysql/3307/data socket = /data/app/mysql/3307/mysql3307.sock symbolic-links = 0 log-error = /data/app/mysql/3307/logs/mysqld3307.log pid-file = /data/app/mysql/3307/mysqld3307.pid character_set_server = utf8 default-storage-engine = INNODB # Post-installation standardization operations (setting environment variables, outputting header files and library files, setting man paths) [root@mysql-multi ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile.d/mysql.sh [root@mysql-multi ~]# chmod +x /etc/profile.d/mysql.sh [root@mysql-multi ~]# source /etc/profile.d/mysql.sh [root@mysql-multi ~]# echo "MANPATH /usr/local/mysql/man" >> /etc/man.config [root@mysql-multi ~]# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf [root@mysql-multi ~]# ldconfig [root@mysql-multi ~]# ln -s /usr/local/mysql/include /usr/include/mysql # Add instances 3306 and 3307 in systemd mode [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3306.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=/data/app/mysql/3306/mysqld3306.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3306 3306 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false [root@mysql-multi ~]# cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# sed -i 's/3306/3307/g' /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3307.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=/data/app/mysql/3307/mysqld3307.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3307 3307 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # Initialize instances 3306, 3307 [root@mysql-multi ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --initialize --basedir=/usr/local/mysql --user=mysql --datadir=/data/app/mysql/3306/data [root@mysql-multi ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --initialize --basedir=/usr/local/mysql --user=mysql --datadir=/data/app/mysql/3307/data # Start instance 3306, 3307 services (start|stop|restart|status) [root@mysql-multi ~]# systemctl start mysqld3306 [root@mysql-multi ~]# systemctl start mysqld3307 [root@mysql-multi ~]# netstat -nuptl | grep mysql tcp6 0 0 :::3306 :::* LISTEN 27165/mysqld tcp6 0 0 :::3307 :::* LISTEN 27201/mysqld [root@mysql-multi ~]# ps -ef | grep mysql mysql 27165 1 2 17:03 ? 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid mysql 27201 1 2 17:03 ? 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid Change the MySQL instance password and test the login. # Get the initial password of the instance [root@mysql-multi ~]# grep 'temporary password' /data/app/mysql/3306/logs/mysqld3306.log 2021-08-05T08:52:37.904630Z 1 [Note] A temporary password is generated for root@localhost: ,&YrsLryq3Ll [root@mysql-multi ~]# grep 'temporary password' /data/app/mysql/3307/logs/mysqld3307.log 2021-08-05T08:52:48.082526Z 1 [Note] A temporary password is generated for root@localhost: OvxKu,su=4O1 # Modify the instance password [root@mysql-multi ~]# mysqladmin -p -S /data/app/mysql/3306/mysql3306.sock password Enter password: # Enter the initial password New password: # Enter the new password 123456 Confirm new password: # Enter the new password 123456 again -------------------------------------------------------------------------------------- # or shell> mysql -uroot -p /data/app/mysql/3306/mysql3306.sock mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; -------------------------------------------------------------------------------------- [root@mysql-multi ~]# mysqladmin -p -S /data/app/mysql/3306/mysql3307.sock password Enter password: # Enter the initial password New password: # Enter the new password 654321 Confirm new password: # Enter the new password 654321 again # Test login [root@mysql-multi ~]# mysql -uroot -p -S /data/app/mysql/3306/mysql3306.sock Enter password: # Enter password 123456 [root@mysql-multi ~]# mysql -uroot -p -S /data/app/mysql/3307/mysql3307.sock Enter password: # Enter password 654321 # Stop the instance [root@mysql-multi ~]# mysqladmin -uroot -p -S /data/app/mysql/3306/mysql3306.sock shutdown Enter password: # Enter password 123456 [root@mysql-multi ~]# mysqladmin -uroot -p -S /data/app/mysql/3307/mysql3307.sock shutdown Enter password: # Enter password 654321 At this point, MySQL multiple instances have been implemented! This is the end of this article about MySQL multi-instance deployment records under Linux. For more relevant MySQL multi-instance deployment content, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Detailed explanation of how to detect and prevent JavaScript infinite loops
>>: Detailed example of using CSS to beautify HTML form controls (form beautification)
This tutorial introduces the application of vario...
1. Download the installation package The installa...
Table of contents 1. From father to son 2. From s...
background: 1. There is a notification table in t...
To display the JSON data in a beautiful indented ...
This article example shares the specific code of ...
** Install mysql-8.0.20 under Linux ** Environmen...
Rem layout adaptation The styles in Vant use px a...
1. Fixed width + adaptive Expected effect: fixed ...
An interesting discovery: There is a table with a...
Table of contents principle Network environment p...
Enter the /etc/yum.repos.d/ folder Create rabbitm...
PS: I've recently been reading the Nginx chap...
Today's campus recruitment written test requi...
Well, you may be a design guru, or maybe that'...