连网安装mysql与源码安装mysql
一、卸载mariadb的rpm包
1、首先,你需要找出已安装的MariaDB包的具体名称。可以使用以下命令列出所有已安装的MariaDB包:rpm -qa | grep mariadb
yum -y remove +【上图的文件名】或者rpm -e --nodeps +【上图的文件名】
二、通过yum在线安装Mysql
1、下载mysql软件源
(1)找到对应linux的版本进行下载、[root@x86b ~]# cat /etc/redhat-release CentOS Stream release 8
下载地址:https://dev.mysql.com/downloads/repo/yum/ 或 http://repo.mysql.com
#使用wget下载mysql(el8) wget http://repo.mysql.com/mysql80-community-release-el8.rpm
2、安装mysql
(1)安装软件源。通过yum安装方法,会直接添加mysql环境变量和启动服务yum -y install mysql80-community-release-el8.rpm
yum -y install mysql-community-server
3、修改配置文件并启动服务
(1)修改配置文件。vim /etc/my.cnf添加配置
symbolic-links=0 # 关闭mysql的符号链接 #skip-grant-tables # 忽略密码验证 port=3306 # mysql监听端口 character-set-server=utf8 # 指定mysql的字符集为utf8 lower_case_table_names=1 #(先不用加)
systemctl start mysqld # 一定要启动服务 systemctl status mysqld # 查看服务状态
4、查看mysql初始密码并修改
(1)查看mysql初始密码grep "password" /var/log/mysqld.log
(2)修改密码验证策略。通过初始密码登录mysql
mysql -u root -p <密码> SHOW VARIABLES LIKE 'validate_password.%';
set global validate_password.policy=0; //设置复杂度为0 set global validate_password.length=6; //设置最小长度6 set global validate_password.check_user_name=off; //设置用户名密码可以相同
出现这个问题是因为并没有安装validate_password插件。具体操作如下:
# 每个平台的文件名后缀都不同对于Unix和类Unix系统为.so,对于 Windows为.dll
INSTALL PLUGIN validate_password SONAME 'validate_password.so'
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
# 选择数据库 use mysql; # 最后授权MySQL,允许远程用户登录访问MySQL update user set host = '%' where user = 'root'; select host, user from user; # 刷新权限 flush privileges;
5、查看3306端口是否开启
netstat -an|grep 3306
发现没有,然后需要在vim /etc/my.cnf文件中添加port = 3306然后保存
若还是不行,则登录到数据库里
(1)查看port参数
show global variables like 'port';
注意端口果然变成0了
(2)查看skip_networking参数
show variables like 'skip_networking';
果然设置了skip-networking参数,这个就是导致mysql监听的端口变成0,并且通过网络无法登录数据库的主要原因了
(3)查看cnf文件中是否有skip-networking参数或skip-grant-tables参数
注释掉后重启mysqld服务,再次查看3306端口就有了
6、排错
(1)ERROR 1146 (42S02): Table 'mysql.user' doesn't exist
一般是/etc/my.cnf写的地址与安装时指定的不一样
(2)ERROR! The server quit without updating PID file (/usr/local/mysql/data/x86a.pid)
可能已经存在mysqld进程
ps -ef | grep mysql pkill -9 mysqld
// 先执行: flush privileges; // 再执行修改密码命令就可以了: set password for root@localhost=password('你的密码');
远程连接用户权限不足,可以使用以下命令授予权限:
GRANT ALL PRIVILEGES ON slurm_jobcomp_db.* TO slurm@'localhost'; FLUSH PRIVILEGES;
报错可以看出root没有权限,查询用户表看root用户权限
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES;
三、源码安装mysql
apt-get install mariadb-server libhdf5-dev libmunge-dev libmariadb-dev-compat1、下载mysql并添加用户
下载地址:https://downloads.mysql.com/archives/community/ 或 http://mirrors.sohu.com/mysql/useradd -s /sbin/nologin mysql mkdir /usr/local/mysql mkdir /usr/local/mysql/data
当让MySQL运行的时候使用一个独立的账号和用户组时,该用户和用户组权限是可以控制的。当系统中文件的权限未设定给Mysql用户以及用户组时,Mysql用户无法进行读写执行操作。而如果MySQL被黑了,可以通那么开始拿到的权限就是那个创建的账号而不是默认的root,我们在编译安装的时候创建一个mysql组和一个mysql用户,并把datadir和安装目录属主改为mysql。
在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql,这样就保证了mysql服务的独立性,即使mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全。
2、cmake配置并编译安装
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 安装目录 -DMYSQL_DATADIR=/usr/local/mysql/data \ # 数据库存放目录 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # Unix socket文件路径 -DWITH_MYISAM_STORAGE_ENGINE=1 \ # 安装myisam存储引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 安装innodb存储引擎 -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ # 安装数据库分区 -DDEFAULT_CHARSET=utf8 \ # 使用utf8字符 -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_USER=mysql \ -DMYSQL_TCP_PORT=3306 \ -DWITH_BOOST=/usr/local/boost
3、创建my.cnf配置文件
(1)vim /etc/my.cnf[mysqld] basedir=/usr/local/mysql # mysql安装目录 datadir=/usr/local/mysql/data # mysql数据存放目录 socket=/usr/local/mysql/mysql.sock # mysql.sock文件存放目录 user=mysql symbolic-links=0 # 关闭mysql的符号链接 skip-grant-tables # 忽略密码验证 [mysqld_safe] port=3306 # mysql监听端口 character-set-server=utf8 # 指定mysql的字符集为utf8 log-error=/usr/local/mysql/mysqld.log # 指定mysql的错误日志存放路径 pid-file=/usr/local/mysql/mysqld.pid # mysql的pid文件存放目录 # The end
chmod 600 /etc/my.cnf
【注意】:所有my.cnf指定的目录mysql用户都要有读写权限。symbolic-links符号链接支持在别的目录下存放mysql的数据库文件,当我们mysql数据盘满了以后,可以启动symbolic-links=1,把mysql的数据放在别的目录下,然后链接到mysql的datadir目录下。
(2)设置mysql目录权限
chown -R mysql:mysql /usr/local/mysql
4、设置mysql服务
(1)将mysql设置成系统服务,生成服务启动脚本cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld
chkconfig --add mysqld //把mysql添加到系统服务 chkconfig mysqld on //把mysql添加到开机自启动 chkconfig --list mysqld //查看mysql开机自启动状态
vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile.d/mysql.sh
5、启动mysql服务
(1)初始化数据库如果无法启动mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
(2)启动mysql服务
systemctl start mysqld(/etc/init.d/mysqld start) systemctl status mysqld
mysql -u root -p update mysql.user set authentication_string=password('123456') where user='root';
6、mysql源码编译常见错误
(1)错误:CMake Error at cmake/boost.cmake:194 (MESSAGE):问题描述:高版本mysql需要boots库的安装才可以正常运行
根据错误提示,进行处理
i、在/usr/local下创建一个名为boost的文件夹
mkdir -p /usr/local/boost
ii、进入这个新创建的文件夹然后下载boost
下载地址:https://sourceforge.net/projects/boost 或 https://sourceforge.net/projects/boost/files/boost/
iii、解压
tar -zxvf boost_1_59_0.tar.gz -C boot
iv、继续cmake,添加下面的部分
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost(2)错误:CMake Error at cmake/readline.cmake:64 (MESSAGE):
问题描述:没有安装ncurses-devel
i、解决办法:yum install ncursrs-devel -y
然后重新编译
ii、源码安装ncurses-devel方式解决
下载地址:http://ftp.gnu.org/gnu/ncurses/
tar -zxvf ncurses-6.4.tar.gz ./configure --with-shared --without-debug --without-ada --enable-overwrite make && make install
解决办法:安装rpcsvc
下载地址:https://github.com/thkukuk/rpcsvc-proto/releases
tar -zxvf rpcsvc-proto-1.4.3.tar.gz ./autogen.sh ./configure make & make install
(4)openssl
(5)Package 'libtirpc', required by 'virtual:world', not found
解决方法:安装libtirpc-devel(https://rpmfind.net/linux/RPM/)
解决办法:在源码包里,编辑文件mysql-5.6.38/cmd-line-utils/libedit/terminal.c(mysql安装包所在路径)
把terminal_set方法中的char buf[TC_BUFSIZE];这一行注释,再把area=buf;改为area=NULL;
更改后如下部分
protected int terminal_set(EditLine el, const char *term) { int i; /*char buf[TC_BUFSIZE];*/ char *area; const struct termcapstr *t; sigset_t oset, nset; int lins, cols; --phpfensi.com (void) sigemptyset(&nset); (void) sigaddset(&nset, SIGWINCH); (void) sigprocmask(SIG_BLOCK, &nset, &oset); area = NULL;
然后重新编译即可
cmake ****** make && make install
。