mysql8源码编译安装
-
下载 Boost 库:你可以从 Boost 官方网站下载所需的版本(1.77.0)。链接如下:
https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2
-
手动安装 Boost:下载后,你需要解压并构建 Boost 库。以下是一般步骤:
复制 tar xvf boost_1_77_0.tar.bz2 cd boost_1_77_0 ./bootstrap.sh sudo ./b2 sudo ./b2 install
-
克隆源代码:使用Git命令克隆MySQL源代码仓库到本地计算机。
git clone https://github.com/mysql/mysql-server.git 或者 wget https://github.com/mysql/mysql-server/archive/refs/tags/mysql-8.0.37.tar.gz
-
安装依赖:安装编译MySQL所需的依赖项。这可能包括编译器、库文件、以及一些开发工具。在Linux系统上,这通常可以通过包管理器完成,例如在Ubuntu上:
sudo apt-get update sudo apt-get install build-essential libssl-dev zlib1g-dev libncurses5-dev libreadline-dev libpcre3-dev libaio1 libpcre3-dev libtool libtool-bin autoconf apt-get install bison
-
配置构建选项:
进入源代码目录,并运行cmake
或configure
脚本来配置构建选项。你可以指定安装目录、启用或禁用某些特性等。
cd /root/mysql-server-mysql-8.0.37
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DWITH_BOOST=/usr/local/include ..
这里的 ..
是指相对路径,指向源代码目录 /root/mysql-server-mysql-8.0.37
如果文件已经生成build/sql/CMakeLists.txt
文件,但 CMake 仍然报告找不到文件,尝试清理 CMake 缓存并重新配置:
cd /root/mysql-server-mysql-8.0.37/build
rm -rf *
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DWITH_BOOST=/usr/local/include ..
-
编译源代码:编译MySQL源代码。这可能需要一些时间,取决于你的计算机性能。
make
-
安装MySQL:编译完成后,将编译好的MySQL安装到系统上。
sudo make install
-
初始化MySQL:安装完成后,初始化MySQL数据库。
sudo useradd --system --shell /bin/false --home /nonexistent mysql sudo groupadd --system mysql sudo mkdir -p /opt/mysql/data sudo chown mysql:mysql /opt/mysql/data sudo chmod 750 /opt/mysql/data
找到 MySQL 的配置文件(通常是 /etc/mysql/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf),确保 datadir 指向正确的路径,例如:
[mysqld] datadir=/opt/mysql/data
重新初始化 MySQL 数据目录:
sudo rm -rf /opt/mysql/data/* sudo /opt/mysql/bin/mysqld --initialize --user=mysql --basedir=/opt --datadir=/opt/mysql/data
-
启动MySQL服务:启动MySQL服务,使其作为守护进程运行。
vi /etc/systemd/system/mysqld.service [Unit] Description=MySQL Community Server [Service] ExecStart=/opt/mysql/bin/mysqld User=mysql Group=mysql [Install] WantedBy=multi-user.target systemctl daemon-reload sudo systemctl start mysqld
-
安全配置:运行
mysql_secure_installation
脚本来设置root密码,移除匿名用户,禁止root用户远程登录等安全措施。sudo mysql_secure_installation
-
验证安装:使用
mysql
命令行工具连接到MySQL服务器,验证安装是否成功。mysql -u root -p #重置密码 USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; #开启远程连接 create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #删除账号 DROP USER 'username'@'host'; #授权 GRANT ALL ON *.* TO 'root'@'%'; GRANT privileges ON database.table TO 'username'@'host'; #撤销授权 REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; REVOKE privileges ON database.table FROM 'username'@'host'; #刷新 flush privileges;
mariadb编译安装
sudo apt install liblzma-dev flex libxml2-dev libbz2-dev liblz4-dev xz-utils liblzo2-dev libsnappy-dev
下载源码
https://mirrors.aliyun.com/mariadb//mariadb-10.11.8/source/mariadb-10.11.8.tar.gz
解压后编译
cmake . \
-DCMAKE_INSTALL_PREFIX=/opt/mariadb \
-DMYSQL_UNIX_ADDR=/opt/mariadb/mysql.sock \
-DSYSCONFDIR=/opt/mariadb/etc \
-DMYSQL_DATADIR=/opt/mariadb/data \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITHOUT_TOKUDB=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_BOOST=system \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=1
make && make install
配置MariaDB
chown -R mysql:mysql /opt/mariadb
# 复制 MariaDB 配置文件到 /etc 目录
cp /opt/mariadb/support-files/wsrep.cnf /opt/mariadb/etc/my.cnf
# 安装数据库到数据目录
/opt/mariadb/scripts/mysql_install_db --user=mysql --datadir=/opt/mariadb/data --defaults-file=/opt/mariadb/etc/my.cnf
# 创建启动脚本
cp /opt/mariadb/support-files/mysql.server /etc/init.d/mysqld
# 启动服务
/etc/init.d/mysqld start
# 配置环境变量
echo -e "export PATH=\$PATH:/opt/mariadb/bin/" > /etc/profile.d/mysql.sh
chmod 0777 /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
初始化MariaDB
# 运行 MariaDB 初始化脚本
mysql_secure_installation
Enter current password for root (enter for none): # 直接Enter,预设MariaDB没有密码
Switch to unix_socket authentication [Y/n] y # y,切换到
Change the root password? [Y/n] y # y,设定root密码
Remove anonymous users? [Y/n] y # y,移除匿名登入
Disallow root login remotely? [Y/n] y # y,移除远端登入权限
Remove test database and access to it? [Y/n] y # y,移除测试资料库
Reload privilege tables now? [Y/n] y # y,重新载入权限表
设置自启动
systemctl enable mysqld.service && systemctl start mysqld.service
------------------
//Host xxx is not allowed to connect to this MariaDb server
IP-方法1
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
授权指定IP-方法2
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'116.30.70.187' IDENTIFIED BY 'password' WITH GRANT OPTION;
修改user表root用户host字段为%(所有IP)
mysql>use mysql;
mysql>update user set host = '%' where user = 'root' and host='localhost';
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。