MYSQL5.6和5.7编译标准化安装与配置

文档结构图以下:mysql

 

1、前期规划linux

一、软件环境以及说明

操做系统:RedHat Linux 6.7 64位c++

数 据 库:MYSQL5.6.38/5.7.20sql

MySQL 5.6:初始化数据时须要进到家目录的 script 目录下shell

 

执行:数据库

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql --defaults-file=/etc/my3306.cnf --user=mysqlvim

个人环境执行以下:windows

./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.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 这个命令进行初始化数据的操做了。

 

个人环境执行以下:

/usr/local/mysql5.7/bin/mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize

注:--initialize 会自动生成密码在 error log 里面。若是加 --initialize-insecure  密码为空

 

2、安装数据库前准备

 

一、Selinux和系统防火墙iptables 须要关闭

service iptables stop

chkconfig iptables off

vi /etc/sysconfig/selinux

setenforce 0

 

查看IPTABLES 当前状态与关闭过程

chkconfig --list|grep iptables

 

也能够根据须要开放端口。

 

二、关闭sendmail服务

先查看是否安装sendmail的相关组件。

rpm -qa | grep sendmail

 

 

若是已安装sendmail插件:

service sendmail stop

service sendmail stop

chkconfig sendmail off

 

三、修改IO调度

查看IO 调度文件:

cat /sys/block/sda/queue/scheduler

 

修改I/O调度器;须要在 /etc/grub.conf 加入elevator=deadline,保证永久有效。

 

 

Deadline(截止时间调度程序)

特色:

经过时间以及硬盘区域进行分类,这个分类和合并要求相似于noop的调度程序.

Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操做由于不能被读取而饿死的现象.

Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.

 

四、SWAP分区的设置

Swappiness值大小对如何使用swap分区有着很大的影响。

它有0和100两个极限值,0表明最大限度的使用物理内存,而后才使用swap分区,这种行为有可能致使系统内存溢出,出现OOM的错误,从而致使mysql被意外KILL掉,因此须要谨慎设置。

100则是积极的使用swap分区,而且把内存上面的数据及时搬到swap分区里(不建议)。这里建议你们不分配swap,或者分配4GB的空间就足够了。

 

查看swappiness文件

cat /proc/sys/vm/swappiness

 

vm.swappiness默认为60,设置为0表示尽可能少使用swap,100表示尽可能将inactive的内存页交换到swap里或者释放cache。inactive内存的意思是程序映射着,可是”长时间”不用的内存。咱们能够利用vmstat查看系统里面有多少inactive的内存。

 # vmstat -a 1

这个值推荐设置为5,设置方法以下,在/etc/sysctl.conf文件中增长一行。

vm.swappiness = 5

sysctl -p生效。

 

五、文件系统的选择

推荐使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便。(redhat 7默认xfs)

  

六、操做系统的限制

查看操做系统的限制状况:

ulimit -a

 

 

open files 若是设置不合理,当前服务器的链接过多或者表过多时,就有可能出现打不来表或者访问不了表的现象,默认状况下,Linux的最大句柄数为1024个,表示单个进程最多能够访问1024个文件句柄。若是超过默认值,就会出现文件句柄超限的错误“too much open files”。

 

max user processes 参数的用途是,有时候咱们可能会跑对个实例,可是发现建立不了新的链接,报出“resource temprarily unavaliable”的错误,表示没有足够的资源。

 

为防止以上两种报错状况,咱们能够修改系统的软件限制。

 

vi /etc/security/limits.conf

 

*        soft    nproc   65535

*        hard    nproc  65535

*        soft    nofile  65535

*        hard    nofile  65535

 

 

七、numa须要关闭

关闭numa功能能够更好地分配内存,不须要采用swap的方式来获取内存;有经验的系统管理员和DBA都知道使用swap致使的数据库性能降低影响很大。

语句以下:

具体状况具体修改

方法一:

numactl --interleave=all /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

个人环境是:

numactl --interleave=all /usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &

numactl --interleave=all /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

 

方法二:

vi /etc/grub.conf

numa=off

 

保存,重启服务器。

 

八、上传镜像文件并安装源码包

yum -y install make gcc-c++ cmake bison-devel ncurses-devel glibc

 

3、安装MYSQL5.6

一、安装准备

先把软件包传到 /usr/local/ 目录下

groupadd mysql

useradd -g mysql mysql -s /sbin/nologin

设置mysql登入密码:passwd mysql

 

-s 指定它的shell

-d 指定用户主目录

-g 用户组 指定用户所属的用户组。

-G 用户组,用户组 指定用户所属的附加组。

-M:不要自动创建用户的登入目录。

 

passwd mysql        --能够不用设置密码,由于MYSQL用户不登陆。

 

cd /usr/local/

tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz

ln -s mysql-5.6.38-linux-glibc2.12-x86_64 mysql5.6  目录能够本身设置

 

创建目录:

 

mkdir -p /mydata/mysql/mysql3306/{data,logs}  --生产中建议用项目名+端口号

 

修改权限:

 

chown -R mysql:mysql /mydata/mysql/mysql3306/

chown -R mysql:mysql /usr/local/mysql5.6

chown -R mysql:mysql /mydata

 

设置环境变量:

修改方法一:

echo $PATH

export PATH=$PATH:/usr/local/mysql5.6/bin

 

修改方法二:不推荐用此方法

echo "export PATH=$PATH:/usr/local/mysql5.6/bin" >> /etc/profile

 

或者用

vim /etc/profile

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.6/bin

source /etc/profile

 

准备my3306.cnf 文件,能够本身命名成想要的文件名称。

阿里云是5.6.16版本

cpu 8核 内存32G  innodb_buffer_pool_size 24G;具体设置看状况修改参数,没有分离出undo,tmp,测试环境能够自定义修改innodb_data_file_path,innodb_buffer_pool_size等参数的大小;也可参照姜老师的文件。

 

[client]

port = 3306

socket = /tmp/mysqlclient.sock

default-character-set=utf8

 [mysql]

default-character-set=utf8

[mysqld]

port = 3306

socket = /tmp/mysql3306.sock

basedir = /usr/local/mysql5.6

datadir = /mydata/mysql/mysql3306/data

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 = /mydata/mysql/mysql3306/logs/slow.log

log-error = /mydata/mysql/mysql3306/logs/error.log

log_bin_trust_function_creators=1

long_query_time = 0.05

server-id = 1323306

log-bin = /mydata/mysql/mysql3306/logs/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

 

二、安装MYSQL5.6

cd /usr/local/mysql5.6/scripts/

./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.cnf --user=mysql

以下:

 

两次OK

 

 

启动mysql5.6

/usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &

 

 

查看mysql进程,验证是否启动成功:

 

 

注意:

Mysql 读取配置文件的顺序是

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

 

 

MYSQL关闭:

/usr/local/mysql5.6/bin/mysqladmin -S /tmp/mysql3306.sock shutdown

 

 

本地登录:

mysql -S /tmp/mysql3306.sock

 

 

三、参数修改

一、修改数据库root密码

[root@laodeng5 mysql-5.6.15]# mysqladmin -u root password 'mysql'

或者

方法二:

mysql>set password for 'root'@'localhost'=password('mysql');

mysql>flush privileges;

 

登录方式:

mysql -S /tmp/mysql3306.sock -uroot -p'mysql'

关闭数据库:

mysqladmin -S /tmp/mysql3306.sock shutdown -uroot –p’mysql’

 

二、5.7以前须要安全加固

show databases;

select user,host,password from mysql.user;   --实际就须要user localhost,其它均可以删掉

delete from mysql.user where user != 'root' or host != 'localhost';

mysql> grant all privileges  on *.* to root@'%' identified by "password";  --windows 只容许本地访问,须要给root赋权
Query OK, 0 rows affected (0.00 sec)

 

 

 

三、删除测试库(可选)

select * from mysql.db\G

truncate table mysql.db;

drop database test;

flush privileges;

 

 

怎么确认mysql是否启动起来的?

A.查看进程是否存在

ps aux|grep mysqld

 

B.查看端口是否是监听正确

netstat -nlap|grep mysqld

ss -lnpt | grep mysqld

 

C.查看错误日志有无异常

vim

tail

less

设置大小写不敏感:

mysql> show variables like '%case%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| lower_case_file_system | OFF   |

| lower_case_table_names | 1     |

+------------------------+-------+

 

注意:lower_case_table_names=1,参数为静态参数,须要在my.cnf配置后进去重启生效。

 

 

4、安装MYSQL5.7

一、安装准备工做

MYSQL5.7已经废弃了mysql_install_db 这个初始化命令了。

先把软件包传到 /usr/local/ 目录下

groupadd mysql

useradd -g mysql mysql -s /sbin/nologin

设置mysql登入密码:passwd mysql    --能够不用设置密码,由于MYSQL用户不登陆。

 

-s 指定它的shell

-d 指定用户主目录

-g 用户组 指定用户所属的用户组。

-G 用户组,用户组 指定用户所属的附加组。

-M:不要自动创建用户的登入目录。

 

passwd mysql

 

cd /usr/local/

tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7

 

mkdir -p /mydata/mysql/mysql3307/{data,logs}

 

修改权限:

 

chown -R mysql:mysql /mydata/mysql/mysql3307/

chown -R mysql:mysql /usr/local/mysql5.7

chown -R mysql:mysql /mydata

 

设置环境变量:

修改方法一:

echo $PATH

export PATH=$PATH:/usr/local/mysql5.7/bin

 

修改方法二:不推荐用此方法

echo "export PATH=$PATH:/usr/local/mysql5.7/bin" >> /etc/profile

 

或者用

vim /etc/profile

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.7/bin

source /etc/profile

 

准备my3307.cnf 文件,能够本身命名成想要的文件名称。参数按照实际状况进行修改。

 

[client]

port = 3307

socket = /tmp/mysql5.7.sock

default-character-set=utf8

[mysql]

prompt="\u@db \R:\m:\s [\d]> "

no-auto-rehash

[mysqld]

user = mysql

port = 3307

basedir = /usr/local/mysql5.7

datadir = /mydata/mysql/mysql3307/data

socket = /tmp/mysql3307.sock

log_bin_trust_function_creators=1

character-set-server = utf8mb4

event_scheduler=1

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

skip_name_resolve = 1

open_files_limit = 65535

back_log = 1024

max_connections = 500

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 = /mydata/mysql/mysql3307/logs/slow.log

log-error = /mydata/mysql/mysql3307/logs/error.log

long_query_time = 0.1

server-id = 3307101

log-bin = /mydata/mysql/mysql3307/logs/mysql-binlog

sync_binlog = 1

binlog_cache_size = 4M

max_binlog_cache_size = 1G

max_binlog_size = 1G

expire_logs_days = 7

master_info_repository = TABLE

relay_log_info_repository = TABLE

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_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 = 2000

innodb_io_capacity_max = 4000

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

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

 

 

二、安装MYSQL5.7

cd /usr/local/mysql5.7/bin/

./mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize

 

初始化加上initialize参数,表示会生成一个临时的数据库初始化密码,记录在log-error(错误日志)里面,若是加上--initialize-insecure参数,表明无密码进入。建议使用生成的初始化密码方式。

 

启动mysql5.7

/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

 

 

查看生成的密码文件:

cat /mydata/mysql/mysql3307/logs/error.log |grep password

 

 

 

三、参数修改:

登录并修改密码:

/usr/local/mysql5.7/bin/mysql -S /tmp/mysql3307.sock -uroot -p'ogdf8ru<r,nI'

 

 

设置ROOT密码永不过时:

alter user 'root'@'localhost' password expire never;

 

 

设置ROOT 能够从其余客户端或者服务器登录:

 

mysql> update mysql.user set Host='%' where User='root';

Query OK, 0 rows affected (0.00 sec)

Rows matched: 1  Changed: 0  Warnings: 0

 

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

mysql> select  Host,User from mysql.user;

+-----------+---------------+

| Host      | User          |

+-----------+---------------+

| %         | root          |

| localhost | mysql.session |

| localhost | mysql.sys     |

+-----------+---------------+

3 rows in set (0.00 sec)

 

设置大小写不敏感:

mysql> show variables like '%case%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| lower_case_file_system | OFF   |

| lower_case_table_names | 1     |

+------------------------+-------+

 

注意:lower_case_table_names=1,参数为静态参数,须要在my.cnf配置后进去重启生效。

 

 mysql> grant all privileges  on *.* to root@'%' identified by "password";    --windows 只容许本地访问,须要给root赋权
Query OK, 0 rows affected (0.00 sec)

 

binlog2sql 工具的安装。

相关文章
相关标签/搜索