卸载mariadb,同理查询本机是否有mysql | ||
查询本机mariadb,输入:rpm -qa | grep mariadb | ||
显示:mariadb-libs-5.5.56-2.el7.x86_64 | ||
输入:rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 | ||
再次查询:rpm -qa | grep mariadb | ||
没有结果,继续下一步 | ||
查询mysql,输入:rpm -qa | grep mysql | ||
没有结果,继续下一步 | ||
yum -y install epel-release | ||
yum -y install cmake | ||
为将来方便还可以把相关的也一并安装了: | ||
yum install autoconf automake libtool | ||
yum install -y gcc libgcc gcc-c++ compat-gcc | ||
安装可能依赖库 | ||
yum -y install krb5 krb5-devel libidn libidn-devel openssl openssl-devel | ||
yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxm12 libxm12-devel | ||
yum -y install zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel | ||
yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel | ||
yum -y install perl-Data_dumper python-devel | ||
解压mysql安装包 | ||
tar zxvf /root/mysql-boost-5.7.22.tar.gz | ||
cd mysql-5.7.22 | ||
cmake -DWITH_BOOST=boost -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.22 -DMYSQL_DATADIR=/mnt/data/mysqldb -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_EXAMPLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DMYSQL_USER=mysql -DWITH_ZLIB=bundled -DWITH_READLINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=0 -DWITH_SSL=system | ||
安装和编译 | ||
输入:make | ||
执行make进行编译,编译过程中没有错误的再执行make install安装,由于源代码体积有点大,编译耗费的时间比较长。 | ||
显示:[100%] Built target my_safe_process | ||
输入: make install | ||
安装成功之后,在/usr/local/mysql-5.7.22下就是安装后的文件目录 | ||
数据库初始化 | ||
首先创建文件夹,输入: | ||
mkdir -p /mnt/data/mysqldb/3306/data | ||
mkdir -p /mnt/data/mysqldb/3316/data | ||
/mnt/data/mysqldb/3306/data文件夹用于存放监听3306端口实例的相关配置信息、执行脚本和数据, | ||
/mnt/data/mysqldb/3316/data文件夹用于存放监听3316端口实例的相关配置信息、执行脚本和数据。 | ||
因为mysql数据库将以nginx这个用户来运行,因此首先需要创建这个账户: | ||
useradd mysql -s /sbin/nologin -M //创建mysql用户,但该用户无法登陆且不创建它的家目录 | ||
分别在/mnt/data/mysqldb/3306和/mnt/data/mysqldb/3316创建my.cnf文件,可以使用vim创建并粘贴内容。 | ||
编辑内容输入: | ||
[client] | ||
port=3306 | ||
socket=/mnt/data/mysqldb/3306/mysql.sock | ||
[mysqld_safe] | ||
log-error=/mnt/data/mysqldb/3306/mysql.err | ||
pid-file=/mnt/data/mysqldb/3306/mysql.pid | ||
[mysqld] | ||
# | ||
# * Basic Settings | ||
# | ||
server-id= 6 | ||
log-bin=/mnt/data/mysqldb/3306/mysql-bin | ||
user=mysql | ||
pid-file=/mnt/data/mysqldb/3306/mysql.pid | ||
socket=/mnt/data/mysqldb/3306/mysql.sock | ||
port=3306 | ||
basedir=/usr/local/mysql-5.7.22 | ||
datadir=/mnt/data/mysqldb/3306/data | ||
tmpdir=/tmp | ||
open_files_limit=1024 | ||
external-locking=false | ||
character-set-server=utf8 | ||
default-storage-engine=InnoDB //sonqrqube要求为InnoDB,非MyISAM; | ||
bind-address=0.0.0.0 | ||
max_allowed_packet= 8M | ||
thread_stack=192K | ||
thread_cache_size= 8 | ||
max_connections=800 | ||
max_connect_errors=300 | ||
#table_cache=64 | ||
#thread_concurrency 10 | ||
query_cache_limit=1M | ||
query_cache_size=2M | ||
join_buffer_size=1M | ||
sort_buffer_size=1M | ||
long_query_time=1 | ||
relay-log=/mnt/data/mysqldb/3306/relay-bin | ||
relay-log-info-file =/mnt/data/mysqldb/3306/relay-log.info | ||
binlog_cache_size=1M | ||
max_binlog_cache_size=1M | ||
max_binlog_size=2M | ||
key_buffer_size=16M | ||
read_buffer_size=1M | ||
read_rnd_buffer_size=1M | ||
bulk_insert_buffer_size=1M | ||
lower_case_table_names=1 | ||
skip-name-resolve | ||
slave-skip-errors =1032,1062 | ||
replicate-ignore-db=mysql | ||
#innodb_additional_mem_pool_size=4M | ||
innodb_buffer_pool_size=32M | ||
innodb_data_file_path=ibdata1:12M:autoextend | ||
#innodb_file_io_threads=4 | ||
innodb_thread_concurrency=8 | ||
innodb_flush_log_at_trx_commit=2 | ||
innodb_log_buffer_size=2M | ||
innodb_log_file_size=4M | ||
#innodb_log_files_in_groups=3 | ||
innodb_max_dirty_pages_pct=90 | ||
innodb_lock_wait_timeout=120 | ||
innodb_file_per_table=0 | ||
[mysqldump] | ||
quick | ||
quote-names | ||
max_allowed_packet=16M | ||
输入: | ||
cd /mnt/data/mysqldb/3316 //打开3316目录 | ||
vim my.cnf //新建my. cnf文件,并编辑 | ||
注:在3306及3316配置中都提到了mysql.err这个文件,这个文件是用来记录MySQL启动过程的错误信息的,不过悲催的是如果这个文件不存在,那么是会启动出错的,可又没有地方可以查看错误,因此需要提前创建好文件并设置权限。 | ||
输入: | ||
touch /mnt/data/mysqldb/3306/mysql.err | ||
touch /mnt/data/mysqldb/3316/mysql.err | ||
chmod 766 /mnt/data/mysqldb/3306/mysql.err | ||
chmod 766 /mnt/data/mysqldb/3316/mysql.err | ||
创建MySQL的启动文件 | ||
分别在/mnt/data/mysqldb/3306和/mnt/data/mysqldb/3316创建mysql文件。可用vim来创建文件,这个文件是用来启动MySQL实例的,所以在创建完成不要忘记chmod 755设置。/mnt/data/mysqldb/3306/mysql | ||
cd /mnt/data/mysqldb/3306 //打开3306目录 | ||
vim mysql //新建mysql 文件,并编辑 | ||
mysql输入: | ||
#!/bin/sh | ||
port=3306 | ||
mysql_user="root" | ||
mysql_pwd="mypassword" | ||
cmd_path="/usr/local/mysql-5.7.22/bin" | ||
mysql_sock="/mnt/data/mysqldb/${port}/mysql.sock" | ||
#startup function | ||
function_start_mysql() | ||
{ | ||
if [ ! -e "$mysql_sock" ];then | ||
printf "Starting MySQL...\n" | ||
/bin/sh ${cmd_path}/mysqld_safe --defaults-file=/mnt/data/mysqldb/${port}/my.cnf 2>&1 > /dev/null & | ||
else | ||
echo"mysql is running..." | ||
exit | ||
fi | ||
} | ||
#stop function | ||
function_stop_mysql() | ||
{ | ||
if [ ! -e "$mysql_sock" ];then | ||
printf "MySQL is stopped...\n" | ||
exit | ||
else | ||
printf "Stoping MySQL...\n" | ||
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /mnt/data/mysqldb/${port}/mysql.sock shutdown | ||
fi | ||
} | ||
#restart function | ||
function_restart_mysql() | ||
{ | ||
printf "Restarting MySQL...\n" | ||
function_stop_mysql | ||
sleep 2 | ||
function_start_mysql | ||
} | ||
case $1 in | ||
start) | ||
function_start_mysql;; | ||
stop) | ||
function_stop_mysql;; | ||
restart) | ||
function_restart_mysql;; | ||
*) | ||
printf "Usage: /mnt/data/mysqldb/${port}/mysql {start|stop|restart}\n" | ||
esac | ||
注意: | ||
上述启动文件中关闭实例没有采用kill进程的办法,而是使用mysqladmin shutdown的方法,这个方法需要root级别用户的账号和密码,因此需要控制这个文件的查看和编辑权限。需要给两个文件设置执行权限。输入: | ||
chmod 755 /mnt/data/mysqldb/3306/mysql | ||
chmod 755 /mnt/data/mysqldb/3316/mysql | ||
chown -R mysql:mysql /usr/local/mysql-5.7.22 | ||
/usr/local/mysql-5.7.22/bin/mysqld --initialize --basedir=/usr/local/mysql-5.7.22 --datadir=/mnt/data/mysqldb/3306/data --user=mysql | ||
/usr/local/mysql-5.7.22/bin/mysqld --initialize --basedir=/usr/local/mysql-5.7.22 --datadir=/mnt/data/mysqldb/3316/data --user=mysql | ||
上面的脚本如果执行成功,最后一句里有root用户的初始密码,在本人执行上述两条命令时得到结果显示如下,密码是随机的,请记住一会登录系统后更改临时密码。 | ||
3306操作显示:2018-02-02T07:17:16.388131Z 1 [Note] A temporary password is generated for root@localhost: Q-cVosqiv20M | ||
3316操作显示2018-02-02T08:07:55.437243Z 1 [Note] A temporary password is generated for root@localhost: &u%IKv3?:aOx | ||
启动MySQL实例和登录 | ||
启动3306/3307端口实例,输入: | ||
/mnt/data/mysqldb/3306/mysql start | ||
/mnt/data/mysqldb/3316/mysql start | ||
显示:Starting MySQL... | ||
输入:ps -ef | grep mysql //查看实例是否启动成功,如果启动成功相应的端口就会处于监听状态。 | ||
如果启动不成功,可以通过相应的错误日志来排除错误,如下就是用tail来查看错误日志:tail /mnt/data/mysqldb/3306/mysql.err | ||
登录实例 | ||
cd /usr/local/mysql-5.7.22 | ||
./bin/mysql -u root -p -S /mnt/data/mysqldb/3306/mysql.sock | ||
显示:nter password: | ||
输入:上述随机产生的密码Q-cVosqiv20M | ||
显示:Welcome to the MySQL monitor. Commands end with ; or \g. | ||
登陆成功 | ||
设置密码: | ||
mysql> set password = password('123123'); //此处密码设置为123123,密码可自行设置 | ||
显示:uery OK, 0 rows affected,设置成功。 | ||
mysql>quit //退出数据库 | ||
/mnt/data/mysqldb/3306/mysql stop //停止3306mysql端口 | ||
改完之后记得改3306和3307两个启动文件中的用户密码哦,否则stop命令不会生效的。 | ||
至此,MySQL数据库已完成初始化和初步配置。 | ||
登录到3316端口对应的实例: | ||
cd /usr/local/mysql-5.7.22 | ||
./bin/mysql -u root -p -S /mnt/data/mysqldb/3316/mysql.sock | ||
显示:nter password: | ||
输入:上述随机产生的密码&u%IKv3?:aOx | ||
显示:Welcome to the MySQL monitor. Commands end with ; or \g. | ||
登陆成功 | ||
设置密码: | ||
mysql> set password = password('123123'); //此处密码设置为123123,密码可自行设置 | ||
显示:uery OK, 0 rows affected,设置成功。 | ||
mysql>quit //退出数据库 | ||
/mnt/data/mysqldb/3316/mysql stop //停止3316mysql端口 | ||
grant all privileges on *.* to 'xry'@'210.22.109.150' identified by 'zaq12wsx' with grant option; | ||
flush privileges; | ||