源码安装MySQL
程序员文章站
2023-02-26 13:33:12
[TOC] 一、安装单实例 1、升级openssl "openssl升级" 2、替换软件源 3、root 用户ssh远程登录 4、mysql需要安装的包 5、navicate 连接虚拟机mysql 6、安装mysql utilities ==最好源码安装== 二、安装多实例 1、目录结构 2、脚本语 ......
目录
一、安装单实例
1、升级openssl
#查看版本 openssl version #openssl 安装包 openssl-1.1.0j.tar.gz #下载地址https://www.openssl.org/source/ cd /usr/local/openssl-1.1.1 ./config make make install #受影响的文件夹 #/usr/local/bin #/usr/local/include #/usr/local/lib #先查找 当前openssl的生效目录 which openssl #设置软连接 路径:/usr/bin/openssl mv /usr/bin/openssl /usr/bin/openssl.old ln -s /usr/local/bin/openssl /usr/bin/openssl openssl version #报错error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: no such file or directory ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
2、替换软件源
#替换软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup #https://opsx.alibaba.com/mirror #vim 粘贴的时候 :set paste 按下i时候 可直接粘贴 #用完后需:set nopaste sudo apt-get update sudo apt-get upgrade
3、root 用户ssh远程登录
#新装的系统,首先设置root密码 sudo passwd #编辑 ssh 的文件,将permitrootlogin 的值改为yes $ vim /etc/ssh/sshd_config #重启ssh服务 sudo service ssh restart
4、mysql需要安装的包
#1.环境准备 apt-get install make cmake gcc g++ bison libncurses5-dev build-essential #2.添加用户和组 groupadd mysql useradd -d /home/mysql -g mysql -m mysql #查看mysql id mysql #创建密码 sudo passwd mysql #useradd #-c:加上备注文字,备注文字保存在passwd的备注栏中。 #-d:指定用户登入时的主目录,替换系统默认值/home/<用户名> #-d:变更预设值。 #-e:指定账号的失效日期,日期格式为mm/dd/yy,例如06/30/12。缺省表示永久有效。 #-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1. #-g:指定用户所属的群组。值可以使组名也可以是gid。用户组必须已经存在的,期默认值为100,即users。 #-g:指定用户所属的附加群组。 #-m:自动建立用户的登入目录。 #-m:不要自动建立用户的登入目录。 #-n:取消建立以用户名称为名的群组。 #-r:建立系统账号。 #-s:指定用户登入后所使用的shell。默认值为/bin/bash。 #-u:指定用户id号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。 #3.cmake cmake \ -dcmake_install_prefix=/u01/my3306 \ -dinstall_datadir=/u01/my3306/data \ -ddefault_charset=utf8 \ -ddefault_collation=utf8_general_ci \ -dextra_charsets=all \ -dwith_ssl=yes \ -dwith_embedded_server=1 \ -denabled_local_infile=1 \ -dwith_myisam_storage_engine=1 \ -dwith_innobase_storage_engine=1 \ -dwith_archive_storage_engine=1 \ -dwith_blackhole_storage_engine=1 \ -dwith_federated_storage_engine=1 \ -dwith_partition_storage_engine=1 \ -dmysql_unix_addr=/u01/my3306/run/mysql.sock \ -dmysql_tcp_port=3306 \ -denabled_local_infile=1 \ -dsysconfdir=/etc \ -dwith_boost=boost \ -dwith_readline=on #4.make #5.make install #6.目录重新授权 chown -r mysql:mysql /u01/my3306 chmod 755 -r /u01/my3306 #7.复制my.cnf 初始化 ./mysqld --defaults-file=/u01/my3306/my.cnf --initialize --datadir=/u01/my330 6/data --user=mysql ./mysqld --defaults-file=/u01/my3306/my.cnf --initialize-insecure --datadir=/u01/my3306/data --user=mysql #--initialize 会生成一个随机密码,而 -–initialize-insecure 不会生成密码,在mysql安全配置向导mysql_secure_installation设置密码时,可*选择 mysql 密码等级。 #--datadir目标目录下不能有数据文件。 --重新初始化 需删除data和log的所有文件 rm -fr /u01/my3306/log/binlog/* rm -fr /u01/my3306/log/iblog/* rm -fr /u01/my3306/data/* #8.启动mysql ./mysqld_safe --defaults-file=/u01/my3306/my.cnf --user=mysql & #9.配置安全向导 #https://blog.csdn.net/harryxxxxx/article/details/81135222 mysql_secure_installation
5、navicate 连接虚拟机mysql
grant all privileges on *.* to 'root'@'%' identified by 'rootroot' with grant option; flush privileges;
6、安装mysql utilities
==最好源码安装==
# wget -c http://dev.mysql.com/get/downloads/mysqlguitools/mysql-utilities-1.5.3.zip # unzip mysql-utilities-1.5.3.zip # cd mysql-utilities-1.5.3 # python ./setup.py build # python ./setup.py install
二、安装多实例
1、目录结构
#mysql@fight:~$ tree /home/mysql/新建脚本文件 . ├── m6 ├── m7 ├── shutdown3306.sh ├── shutdown3307.sh ├── start3306.sh └── start3307.sh #mysql@fight:/u01$ tree -l 1 根目录 /u01 其中tmp 为空用作安装时的临时目录 mysql程序放在svr . ├── conf ├── logs ├── mydata ├── mysql-5.7.24 ├── mysql-boost-5.7.24.tar.gz ├── svr └── tmp #mysql@fight:/u01/conf$ ls mysql #mysql@fight:/u01/conf$ cd mysql #mysql@fight:/u01/conf/mysql$ tree . ├── my3306.cnf └── my3307.cnf #mysql@fight:/u01/logs$ tree . ├── my3306 │ ├── binlog │ │ ├── binlog.000001 │ │ ├── binlog.000002 │ │ ├── binlog.000003 │ │ ├── binlog.000004 │ │ └── binlog.index │ ├── error3306.log │ ├── iblog │ │ ├── ib_buffer_pool │ │ ├── ibdata1 │ │ ├── ibdata2 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── ib_logfile2 │ │ ├── ib_logfile3 │ │ └── ibtmp1 │ └── slow3306.log └── my3307 ├── binlog │ ├── mysql-bin.000001 │ ├── mysql-bin.000002 │ ├── mysql-bin.000003 │ ├── mysql-bin.000004 │ └── mysql-bin.index ├── error3307.log ├── iblog │ ├── ib_buffer_pool │ ├── ibdata1 │ ├── ibdata2 │ ├── ib_logfile0 │ ├── ib_logfile1 │ ├── ib_logfile2 │ ├── ib_logfile3 │ └── ibtmp1 └── slow3307.log #mysql@fight:/u01/mydata$ tree -l 2 . ├── my3306 │ ├── auto.cnf │ ├── ca-key.pem │ ├── ca.pem │ ├── client-cert.pem │ ├── client-key.pem │ ├── mysql │ ├── mysqld.pid │ ├── performance_schema │ ├── private_key.pem │ ├── public_key.pem │ ├── server-cert.pem │ ├── server-key.pem │ └── sys └── my3307 ├── auto.cnf ├── ca-key.pem ├── ca.pem ├── client-cert.pem ├── client-key.pem ├── mysql ├── mysqld.pid ├── performance_schema ├── private_key.pem ├── public_key.pem ├── server-cert.pem ├── server-key.pem └── sys #mysql@fight:/u01/svr$ tree -l 2 . └── mysql5.7 ├── bin ├── copying ├── copying-test ├── docs ├── include ├── lib ├── man ├── mysql-test ├── readme ├── readme-test ├── share └── support-files #mysql@fight:/u01/tmp$ ls #mysql@fight:/u01/tmp$ tree
2、脚本语句
- m6 ./m6
mysql --socket=/tmp/mysql3306.sock --port=3306
- m7 ./m6
mysql --socket=/tmp/mysql3307.sock --port=3307
- start3306.sh
sh start3306.sh
mysqld_safe --defaults-file=/u01/conf/mysql/my3306.cnf --user=mysql &
- start3307.sh
sh start3307.sh -
mysqld_safe --defaults-file=/u01/conf/mysql/my3307.cnf --user=mysql &` - shutdown3306.sh
sh shutdown3306.sh -
mysqladmin --socket=/tmp/mysql3306.sock --port=3306 shutdown &` shutdown3307.sh
sh shutdown3307.sh -
mysqladmin --socket=/tmp/mysql3307.sock --port=3307 shutdown &`- 赋可执行权限
chmod 777 -r m6,m7,start3306.sh,start3307.sh,shutdown3306.sh,shutdown3307.sh
2、修改环境变量
#配置环境变量 vim .profile #修改后 #mysql@fight:~$ cat .profile # ~/.profile: executed by the command interpreter for login shells. # this file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022 # if running bash if [ -n "$bash_version" ]; then # include .bashrc if it exists if [ -f "$home/.bashrc" ]; then . "$home/.bashrc" fi fi # set path so it includes user's private bin directories path="$home/bin:$home/.local/bin:$path:/u01/svr/mysql5.7/bin"
3、编译
#1. cmake cmake \ -dcmake_install_prefix=/u01/svr/mysql5.7 \ -dinstall_datadir=/u01/svr/mysql5.7/data \ -ddefault_charset=utf8 \ -ddefault_collation=utf8_general_ci \ -dextra_charsets=all \ -dwith_ssl=yes \ -dwith_embedded_server=1 \ -denabled_local_infile=1 \ -dwith_myisam_storage_engine=1 \ -dwith_innobase_storage_engine=1 \ -dwith_archive_storage_engine=1 \ -dwith_blackhole_storage_engine=1 \ -dwith_federated_storage_engine=1 \ -dwith_partition_storage_engine=1 \ -dmysql_unix_addr=/u01/svr/mysql5.7/run/mysql.sock \ -denabled_local_infile=1 \ -dsysconfdir=/etc \ -dwith_boost=boost \ -dwith_readline=on #2. make #3. make install
4、初始化
#初始化 ./mysqld --defaults-file=/u01/conf/mysql/my3306.cnf --initialize-insecure --datadir=/u01/mydata/my3306 --user=mysql ./mysqld --defaults-file=/u01/conf/mysql/my3307.cnf --initialize-insecure --datadir=/u01/mydata/my3307 --user=mysql
5、启动
#启动 ./mysqld_safe --defaults-file=/u01/conf/mysql/my3306.cnf --user=mysql & ./mysqld_safe --defaults-file=/u01/conf/mysql/my3307.cnf --user=mysql &
6、进入
#mysql --socket=/tmp/mysql3306.sock --port=3306 ./m6 #mysql --socket=/tmp/mysql3307.sock --port=3306 ./m7 #远程连接 ./m6 #进入mysql set password for root@localhost = password('rootroot'); #还不行 grant all privileges on *.* to 'root'@'%' identified by 'rootroot' with grant option; flush privileges;
7、配置数据库密码安全性
#3306 mysql_secure_installation -uroot -prootroot --socket=/tmp/mysql3306.sock #3307 mysql_secure_installation -uroot -prootroot --socket=/tmp/mysql3307.sock #取消密码验证
三、安装5.6
升级openssl
#ubuntu 16.04.5 默认版本 openssl 1.0.2g 1 mar 2016 需更换为openssl 1.0.2r 26 feb 2019 #1、解压 tar -zxvf openssl-1.0.2r.tar.gz cd openssl-1.0.2r ./config --prefix=/usr/local --openssldir=/usr/local/openssl mv /usr/bin/openssl /usr/bin/openssl.old ln -s /usr/local/bin/openssl /usr/bin/openssl #2、查看版本 openssl version #解决的问题 #in function ‘int my_aes_decrypt(const unsigned char*, uint32, unsigned char*, const #unsigned char*, uint32, my_aes_opmode, const unsigned char*)’: #/u01/mysql-5.6.43/mysys_ssl/my_aes_openssl.cc:148:18: error: aggregate ‘evp_cipher_ctx ctx’ has incomplete type and cannot be defined # evp_cipher_ctx ctx; #3、新问题 #[ 82%] linking cxx shared library libmysqlclient.so #/usr/local/lib/libssl.a: error adding symbols: bad value #https://www.cnblogs.com/yoyotl/p/7424967.html #基本原理 #我们都知道在生成一个动态库时需要指定-fpic,这是创建动态库所要求的,共享库被加载是在内存中的位置是不固定的,是一个相对的位置。 #那么在生成静态库时通常不指定-fpic, 可是在64bit编译使用静态库就会提示需要-fpic重新编译该库。 #由于openssl编译静态库时,没有使用-fpic选项,使得编译出来的静态库没有重定位能力。 #这样在64bit机器上编译出来的静态库如果不指定-fpic选项几乎全部不能使用。 #因此需要重新加上-fpic从新编译openssl #4、删除openssl-1.0.2l,重新解压。 ./config -fpic --prefix=/usr/local --openssldir=/usr/local/openssl make depend make install
1、复制脚本并修改端口号3308
cp m6 m8 cp shutdown3306.sh shutdown3308.sh cp start3306.sh start3308.sh #赋权限 chmod 777 m8 chmod 777 shutdown3308.sh chmod 777 start3308.sh
2、创建目录
mkdir -p /u01/logs/my3308/iblog mkdir -p /u01/logs/my3308/binlog mkdir -p /u01/logs/my3308/relaylog #主从复制需要 mkdir -p /u01/mydata/my3308 #mkdir -p /u01/mydata/my3308/tmp 从机需要 mkdir -p /u01/conf/mysql mkdir -p /u01/svr/mysql5.6 mkdir -p /u01/tmp
3、修改配置文件my3308.cnf
#修改权限 chown -r mysql:mysql /u01/conf/mysql/my3308.cnf chmod 755 my3308.cnf
4、编译
#1. cmake cmake \ -dcmake_install_prefix=/u01/svr/mysql5.6 \ -dinstall_datadir=/u01/svr/mysql5.6/data \ -ddefault_charset=utf8 \ -ddefault_collation=utf8_general_ci \ -dextra_charsets=all \ -dwith_ssl=system \ -dwith_embedded_server=1 \ -denabled_local_infile=1 \ -dwith_myisam_storage_engine=1 \ -dwith_innobase_storage_engine=1 \ -dwith_archive_storage_engine=1 \ -dwith_blackhole_storage_engine=1 \ -dwith_federated_storage_engine=1 \ -dwith_partition_storage_engine=1 \ -dmysql_unix_addr=/u01/svr/mysql5.6/run/mysql.sock \ -denabled_local_infile=1 \ -dsysconfdir=/etc #5.6不需要-dwith_boost=boost \ #2. make 报错 #清楚make 缓存 #make clean #rm cmakecache.txt #3. make install
5、初始化
#cd /u01/svr/mysql5.6/scripts ./mysql_install_db --defaults-file=/u01/conf/mysql/my3308.cnf --datadir=/u01/mydata/my3308 --user=mysql #报错 #fatal error: could not find ./bin/my_print_defaults #bin目录有这个文件, #. 当前目录 ./bin 当前目录下的bin文件夹 ./scripts/mysql_install_db --defaults-file=/u01/conf/mysql/my3308.cnf --datadir=/u01/mydata/my3308 --user=mysql
6、启动
mysqld_safe --defaults-file=/u01/conf/mysql/my3308.cnf --user=mysql &
四、尝试
1、密码修改
#远程连接密码 grant all privileges on *.* to 'root'@'%' identified by 'rootroot' with grant option; flush privileges; #dos 数据库登录密码 set password for root@localhost = password('rootroot'); flush privileges;
2、validate_password
#最初 配置安全向导 mysql_security_install -uroot -prootroot --socket=/tmp/mysql3307.sock #.so 路径 /u01/svr/mysql5.7/lib/plugin/ install plugin validate_password soname 'validate_password.so'; #禁用 不区分大小写 validate_password=off validate-password=off #查看插件列表 show plugins; #查看系统中所有的表,可以查看那些plugin是可以卸载的 select *from information_schema.`plugins`; #插件注册表 #如果使用该--skip-grant-tables选项启动服务器 ,则不会查询该mysql.plugin表,也不会加载其中列出的插件。 select *from mysql.`plugin`; #卸载插件 uninstall plugin validate_password; #1.内置插件不能卸载 information_schema.library 为null的 #2.select t.load_option from information_schema t; value为force_plus_permanent #禁止在运行的时候卸载插件 #取消root用户登录时的密码 set password for root@localhost=password('');
3、mysqld_multi
#不准,两个实例明明结束了,仍然显示正在运行 #j /etc/my.cnf 配置文件出错 mysqldadmin的路径配置了
4、查看my.cnf配置文件查找顺序
mysqld --verbose --help|grep my.cnf #mysql@fight:~$ mysqld --verbose --help|grep my.cnf #/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf # my.cnf, $mysql_tcp_port, /etc/services, built-in default
上一篇: MySQL数据库事务及其特性