您的位置:首页 > 数据库 > MySQL

mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制

2016-06-15 09:47 507 查看
[root@DB-S ~]# ll /usr/local/|grep mysql
lrwxrwxrwx. 1 root root   21 Jun 14 01:52 mysql -> /alidata/server/mysql
#这是脚本免编译的安装的环境(比较复杂)


[root@DB-S /]# tree /data/
/data/
├── 3307
│   └── data
└── 3308
└── data

4 directories, 0 files


[root@DB-S 3307]# find /data -type f -name mysql |xargs chmod 700


[root@DB-S scripts]# ls
mysql_install_db
[root@DB-S scripts]# pwd
/alidata/server/mysql/scripts


[root@DB-S scripts]# ./mysql_install_db --basedir=/alidata/server/mysql --datadir=/data/3307/data --user=mysql
[root@DB-S scripts]# ./mysql_install_db --basedir=/alidata/server/mysql --datadir=/data/3308/data --user=mysql


/usr/local/mysql/bin/mysqld: File '/data/3307/mysql-bin.index' not found (Errcode: 13)
160614  5:46:15 [ERROR] Aborting
#没有权限
root@DB-S data]# chown -R mysql:mysql 330*
[root@DB-S data]# ll
total 8
drwxr-xr-x. 3 mysql mysql 4096 Jun 14 06:03 3307
drwxr-xr-x. 3 mysql mysql 4096 Jun 14 05:48 3308


[root@DB-S 3308]# ./mysql start
+ port=3308
+ echo 3308
3308
+ mysql_user=root
+ CmdPath=/usr/local/mysql/bin
+ mysql_sock=/data/3308/mysql.sock
+ case $1 in
+ function_start_mysql
+ '[' '!' -e /data/3308/mysql.sock ']'
+ printf 'Starting MySQL.....\n'
Starting MySQL.....
+ /bin/bash /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf


[root@DB-S 3308]# netstat -lnutp|grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      16239/mysqld
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24077/mysqld
tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      24910/mysqld


[root@DB-S 3308]# mysql -uroot -p -S /data/3308/mysql.sock
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.40-log MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


关闭不同端口的数据库:
[root@DB-S 3307]# ./mysql stop
3307
Stoping MySQL.....
[root@DB-S 3307]# netstat -lnutp|grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      16239/mysqld


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[root@DB-S ~]# ls /data/330*
/data/3307:
data  my.cnf  mysql  mysql_barry3307.err  mysql-bin.000001  mysql-bin.index  mysqld.pid  mysql.sock  slow.log

/data/3308:
data  my.cnf  mysql  mysql_barry3308.err  mysql-bin.000001  mysql-bin.index  mysqld.pid  mysql.sock  slow.log

#下面有脚本mysql的内容和my.cnf的内容


[root@DB-S ~]# cat /data/3307/my.cnf
[client]
port            = 3307
[mysql]
no-auto-rehash
[mysqld]
user    = mysql
port    = 3307
basedir = /usr/local/mysql
datadir = /data/3307/data
socket          = /data/3307/mysql.sock
open_files_limit    = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_cache = 614
external-locking = FALSE
max_allowed_packet =8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
#default_table_type = InnoDB
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
max_heap_table_size = 2M
long_query_time = 1
#log_long_format
log-error = /data/3307/error.log
log-slow-queries = /data/3307/slow.log
pid-file = /data/3307/mysql.pid
log-bin = /data/3307/mysql-bin
relay-log = /data/3307/relay-bin
relay-log-info-file = /data/3307/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
myisam_sort_buffer_size = 1M
myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db=mysql
server-id = 2
innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 32M
innodb_data_file_path = ibdata1:128M: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_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
[mysqldump]
quick
max_allowed_packet = 2M
[mysqld_safe]
log-error=/data/3307/mysql_barry3307.err
pid-file=/data/3307/mysqld.pid


[root@DB-S ~]# cat /data/3307/mysql
#!/bin/bash
#mysql多实例启动脚本
#init
port=3307
echo $port
mysql_user="root"
#mysql_pwd="" #注意密码
CmdPath="/usr/local/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
#startup function
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL.....\n"
/bin/bash ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 >/dev/null&
else
printf "MySQL is running......\n"
exit
fi

}
#stop function
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped.... \n"
exit
else
printf "Stoping MySQL.....\n"
${CmdPath}/mysqladmin -u ${mysql_user}  -S /data/${port}/mysql.sock shutdown
fi      #如查有密码加 -p${mysql_pwd}

}
#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: /data/${port}/mysql {start|stop|restart}\n"
esac


端口3308同上,把3307换成3308就行了!

百度网盘(配好的配置文件):http://pan.baidu.com/s/1bo6MTGV

配置mysql多实例数据库开机自启动:

[root@DB-S 3308]# echo "/data/3307/mysql start" >>/etc/rc.local
[root@DB-S 3308]# echo "/data/3308/mysql start" >>/etc/rc.local
[root@DB-S 3308]# grep "330[7,8]" /etc/rc.
rc.d/         rc.local      rc.local.bak  rc.sysinit
[root@DB-S 3308]# grep "330[7,8]" /etc/rc.local
/data/3307/mysql start
/data/3308/mysql start


[root@DB-S ~]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/etc/init.d/mysqld start
/etc/init.d/nginx start
/etc/init.d/php-fpm start
systemctl start vsftpd.service
/data/3307/mysql start
/data/3308/mysql start


为root增加密码:

[root@DB-S ~]# mysqladmin -S /data/3307/mysql.sock -uroot password"3307"
mysqladmin: Unknown command: 'password3307'
[root@DB-S ~]# mysqladmin -S /data/3307/mysql.sock -uroot password "3307"
[root@DB-S ~]# mysql -S /data/3307/mysql.sock #这是无法这样登录
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@DB-S ~]# mysql -S /data/3307/mysql.sock -uroot -p
Enter password: #密码:3307
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.40-log MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


主从复制配置:

[root@DB-S ~]# grep 'server-id' /etc/my.cnf
server-id	= 1
#server-id       = 2
[root@DB-S ~]# grep 'server-id' /data/3307/my.cnf
server-id = 2
[root@DB-S ~]# sed -i 's/server-id.*/server-id = 3/g' /data/3308/my.cnf
[root@DB-S ~]# grep 'server-id' /data/3308/my.cnf
server-id = 3


创建用于同步的帐号:

[root@DB-S ~]# mysql -uroot -p
mysql> grant replication slave on *.* to 'rep'@'%' identified by "3306";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


锁表只读:

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)


查看主库状态:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000017 |      459 |              |                  |#后面的从库复制时是从这个位置开始同步
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


导出数据库数据:

[root@DB-S backup]# /alidata/server/mysql/bin/mysqldump -uroot -p3306 --all-databases|gzip >/server/backup/mysql_bak.`date +%F`.sql.gz
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.


[root@DB-S ~]# ls /server/backup/mysql_bak.2016-06-14.sql.gz
/server/backup/mysql_bak.2016-06-14.sql.gz


确保导库期间,数据库没有数据插入,可以再检查下主库状态信息

[root@DB-S ~]# mysql -uroot -p3306 -e "show master status"
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000017 |      459 |              |                  |
+------------------+----------+--------------+------------------+


导库后,解锁主库,恢复可写:

[root@DB-S ~]# mysql -uroot -p3306 -e "unlock tables;"


把主库备份的MySQL数据迁移到从库:

设置server-id值并关闭binlog设置

[root@DB-S ~]# egrep "log-bin|erver-id" /data/3307/my.cnf
#log-bin = /data/3307/mysql-bin
server-id = 2
[root@DB-S ~]# sed -i 's/\(log-bin.*\)/#\1/g' /data/3308/my.cnf
[root@DB-S ~]# egrep "log-bin|erver-id" /data/3308/my.cnf
#log-bin = /data/3308/mysql-bin
server-id = 3
[root@DB-S ~]# service mysqld start
Starting MySQL.. SUCCESS!
[root@DB-S ~]# /data/3307/mysql start
3307
Starting MySQL.....
[root@DB-S ~]# /data/3308/mysql start
[root@DB-S ~]# netstat -lnutp |grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      7526/mysqld
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      8342/mysqld
tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      9155/mysqld


还原主数据库导出的数据备份:

[root@DB-S backup]# ls
mysql_bak.2016-06-14.sql.gz
[root@DB-S backup]# which gzip
/bin/gzip
[root@DB-S backup]# gzip -d mysql_bak.2016-06-14.sql.gz
[root@DB-S backup]# ls
mysql_bak.2016-06-14.sql


[root@DB-S backup]# mysql -uroot -p3307 -S /data/3307/mysql.sock <mysql_bak.2016-06-14.sql
[root@DB-S backup]# mysql -uroot -p3308 -S /data/3308/mysql.sock <mysql_bak.2016-06-14.sql


登录从库配置同步参数:

[root@DB-S backup]# mysql -uroot -p3307 -S /data/3307/mysql.sock <<EOF
> CHANGE MASTER TO
> MASTER_HOST='192.168.1.99',
> MASTER_PORT=3306,
> MASTER_USER='rep',
> MASTER_PASSWORD='3306',
> MASTER_LOG_FILE='mysql-bin.000018',
> MASTER_LOG_POS=107;
> EOF


[root@DB-S backup]# mysql -uroot  -S /data/3308/mysql.sock <<EOF
CHANGE MASTER TO
MASTER_HOST='192.168.1.99',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='3306',
MASTER_LOG_FILE='mysql-bin.000018',
MASTER_LOG_POS=107;
EOF


启动从库同步开关:

[root@DB-S backup]# mysql -uroot -p'3307' -S /data/3307/mysql.sock -e "start slave;"
[root@DB-S backup]# mysql -uroot  -S /data/3308/mysql.sock -e "start slave;"
[root@DB-S backup]# mysql -uroot  -p3307 -S /data/3307/mysql.sock -e "show slave status\G;"
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.99
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000018
Read_Master_Log_Pos: 107
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000018
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 403
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1


[root@DB-S backup]# mysql -uroot -S /data/3308/mysql.sock -e "show slave status\G;"*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.99
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000018
Read_Master_Log_Pos: 107
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000018
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 403
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1


判断复制是否搭建成功就看如下IO和SQL两个线程是否显示为Yes状态
Slave_IO_Running:Yes 负责从库去主库读取Binlog日志,并写入从库的中继日志中
Slave_SQL_Runnint:Yes 负责读取并中继日志中Binlog,转换SQL语句后应用到数据库汇总
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: