MySQL5.6与MySQL5.7的搭建有一些不一样。请读者仔细阅读笔者搭建的过程,如发现错误,请反馈给我,让我们共同学习和进步,共同在DT这一条道路上越走越远。向每一位读者执意诚挚的敬意。
(*).OS环境:Red Hat Enterprise Linux 7.4
(*).数据库版本:MySQL 5.6.37 和MySQL5.7.19
一、MySQL5.6的单实例搭建
新建software目录
mkdir /software
用Xftp5 上传MySQL5.6 到/software下
1.创建家目录(basedir):
mkdir -p /usr/local/
把软件上传到/usr/local/目录下进行解压
[root@localhost software]# tar -zxvf mysql-5.6.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
为了方便,同时不让人看清所用的产品版本,保证商业的机密性。然后把 mysql-5.6.37-linux-glibc2.12-x86_64 更名为mysql
[root@localhost local]# mv mysql-5.6.37-linux-glibc2.12-x86_64/ mysql
添加mysql用户
[root@localhost local]# useradd mysql
最后授权mysql
[root@localhost local]# chown mysql:mysql -R /usr/local/mysql
查看授权情况
2.创建数据目录(datadir):
mkdir -p /data/mysql3306
对数据目录授权
[root@localhost data]# chown mysql:mysql -R data/mysql3306 授权 mysql
查看授权情况
3.修改配置文件:vi /etc/my3306.cnf
##################### mysql5.6 配置文件#############################################
[client]
port = 3306
socket = /tmp/mysql.sock
#default-character-set=utf8
[mysql]
#default-character-set=utf8
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
open_files_limit = 3072
back_log = 103
max_connections = 512
max_connect_errors = 100000
table_open_cache = 512
external-locking = FALSE
max_allowed_packet = 128M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 51
query_cache_size = 32M
tmp_table_size = 96M
max_heap_table_size = 96M
slow_query_log = 1
slow_query_log_file = /data/mysql3306/slow.log
log-error = /data/mysql3306/error.log
long_query_time = 0.05
server-id = 1233306
log-bin = /data/mysql3306/mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 128M
max_binlog_size = 1024M
expire_logs_days = 7
key_buffer_size = 32M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
character-set-server=utf8
default-storage-engine=InnoDB
binlog_format=row
#gtid_mode=on
#log_slave_updates=1
#enforce_gtid_consistency=1
interactive_timeout=100
wait_timeout=100
transaction_isolation = REPEATABLE-READ
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 1434M
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 50
innodb_file_per_table = 1
innodb_locks_unsafe_for_binlog = 0
[mysqldump]
quick
max_allowed_packet = 32M
4.初始化数据
cd /usr/local/mysql/scripts
执行./mysql_install_db 这个脚本
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql 3306--defaults-file=/etc/my3306.cnf --user=mysql
注意:出现两个OK代表MySQL5.6初始化成功
查看初始化mysql生成的文件
cd /data/mysql3306/
5.启动mysql服务
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3306.cnf --user=mysql &
查看mysql是否启动成功
[root@localhost bin]# ps -ef|grep mysql
6.同时:可以设置开机自启动MySQL服务
由于CentOS 6 和CentOS 7 设置开机自启动有一点儿不一样,故首先查看操作系统版本
cat /proc/version
6.1 CentOS 7或者Red Hat 7可以设置mysql开机自启动
vim /usr/lib/systemd/system/mysql.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
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3306.cnf --user=mysql
LimitNOFILE = 5000
启动MySQL 服务
systemctl start mysql.service
设置开机自启动
systemctl enable mysql.service
6.2 CentOS 6 和 Red Hat 7可以设置mysql开机自启动
vim /etc/rc.local
在最后一行加上
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3306.cnf --user=mysql &
7.修改环境变量
在文件 vim /etc/profile 添加 export PATH=$PATH:/usr/local/mysql/bin
并且要让环境变量生效
[root@localhost ~]# source /etc/profile
8.添加MySQL数据密码
直接输入mysql 进入库中(全量路径)
在MySQL5.6中查看mysql 的信息
mysql> show databases;
mysql> use mysql;
mysql> select host,user,Password from user;
这里面有六条信息,我们只需要保留root和localhost即保留第一行
mysql> delete from user where host!='localhost' or user!='root';
mysql> select host ,password,user from user;
我们查询发现,Szzx.888变成了暗文加密的形式
注意:修改完密码后一定要刷新权限
只有这样以后进入库中才会需要密码,并且密码生效
mysql> flush privileges;
退出mysql数据库,再次输入mysql 发现不能进去了,则代表密码添加成功
输入密码Szzx.888就进入了mysql
[root@localhost ~]# mysql -uroot -p
Enter password:
注意:以上的只能用于本地root登录数据库,不能远程登录数据库
9.添加MySQL root用户远程连接
mysql> use mysql;
mysql> update user set host=’%’ where user=’root’;
注意:一定要刷新权限
mysql> flush privileges;
再次查看MySQL的用户连接情况
这种结果表明可以用root 用户进行远程连接操作
二、MySQL 5.7单实例搭建
1.创建家目录(basedir):
mkdir -p /usr/local/
把软件上传到/usr/local/目录下进行解压
[root@localhost software]# tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
然后把 mysql-5.7.19-linux-glibc2.12-x86_64 更名为mysql
[root@localhost local]# mv mysql-5.7.19-linux-glibc2.12-x86_64/ mysql
添加mysql用户并对mysql用户授权
[root@localhost local]# useradd mysql
[root@localhost local]# chown mysql:mysql -R mysql
2.创建数据目录(datadir):
mkdir -p /data/mysql
cd /data/mysql
[root@localhost mysql]# cd ..
授权 mysql(一定要级联授权)
[root@localhost data]# chown mysql:mysql -R mysql
3、配置文件: vi /etc/my.cnf
[client]
port = 3306
socket = /data/mysql/mysql.sock
[mysql]
prompt="\u@db \R:\m:\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql/
socket = /data/mysql/mysql.sock
pid-file = db.pid
character-set-server = utf8mb4
skip_name_resolve = 1
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 768
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
slow_query_log_file = /data/mysql/slow.log
log-error = /data/mysql/error.log
long_query_time = 0.1
server-id = 3306101
log-bin = /data/mysql/mybinlog
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 1G
max_binlog_size = 1G
expire_logs_days = 7
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = REPEATABLE-READ
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_undo_log_size = 4G
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
internal_tmp_disk_storage_engine = InnoDB
innodb_stats_on_metadata = 0
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
performance_schema = 1
performance_schema_instrument = '%=on'
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
[mysqldump]
quick
max_allowed_packet = 32M
4、添加环境变量
vi ~/.bash_profile
在里面添加如下内容
MYSQL_HOME=/usr/local/mysql
export MYSQL_HOME
PATH=$MYSQL_HOME/bin:$PATH
export PATH
同时,生效环境变量
source ~/.bash_profile
5.初始化数据库:
cd /usr/local/mysql/bin/
./mysqld --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/ --initialize-insecure
启动MySQL
./mysqld_safe --defaults-file=/etc/my.cnf &
[root@localhost bin]# ./mysql
在MySQL5.7中修改密码为123123
use mysql;
[mysql]> SET PASSWORD=PASSWORD('123123');
[mysql]> flush privileges;
[root@localhost ~]# mysql -uroot -p
Enter password: 输入密码123123就进入了mysql
查看MySQL的用户,密码
select host,user,authentication_string from mysql.user;
注意:此root 用户只能是本地连接
6.添加MySQL root用户远程登录
mysql> use mysql;
mysql> update user set host=’%’ where user=’root’;
注意:一定要刷新权限
查看结果
select host,user,authentication_string from mysql.user;
mysql> flush privileges;
这种结果表示修改成功,可以远程操作数据库。
三、MySQL 5.6 和 MySQL 5.7安装的比较
MySQL 5.6:初始化数据时需要进到家目录的 script 目录下
执行:/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/
--datadir=/data/mysql --defaults-file=/etc/my.cnf --user=mysql
注意:此数据库的密码为空。
MySQL 5.7:初始化数据时需要进到家目录的 bin 目录下
执行:/usr/local/mysql/bin/mysqld --user=mysql --datadir=/data/mysql
--basedir=/usr/local/mysql/ --initialize
显然已经废弃了使用 mysql_install_db 这个命令进行初始化数据的操作了。
注意:--initialize 会自动生成随机密码在 error log 里面。如果加 --initialize-insecure 表示 密码为空。