LINUX 下SQL server 安装、配置及对接ceph功能性能测试

版权声明:此博文为博主原创,未经允许不得私自转载! https://blog.csdn.net/pansaky/article/details/88850431

1.安装ceph环境(略)
2.安装iscsi 启动器及目标器(略)
修改iscsi启动器地址为ceph集群块设备target,然后扫描并登陆启动器,挂载块设备
这里最好使用多路径(安装multipath服务),然后将块设备路径挂载在客户端(即sqlserver安装节点上、/mnt/sqlserver)
1)查看多路径,
[root@client-152 ~]# multipath -ll
36001405f091d90da55e450e8dd2d4a54 dm-0 ORCADT  ,OrcaBlockDevice
size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='queue-length 0' prio=130 status=active
| `- 36:0:0:0 sdb 8:16  active ready running
|-+- policy='queue-length 0' prio=10 status=enabled
| `- 37:0:0:0 sdd 8:48  active ready running
`-+- policy='queue-length 0' prio=10 status=enabled
  `- 35:0:0:0 sdc 8:32  active ready running

2)查看块设备映射磁盘
[root@client-152 ~]# lsblk
NAME                                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                   8:0    0 931.5G  0 disk
├─sda1                                8:1    0   200M  0 part  /boot/efi
├─sda2                                8:2    0   500M  0 part  /boot
├─sda3                                8:3    0   7.8G  0 part  [SWAP]
└─sda4                                8:4    0   923G  0 part  /
sdb                                   8:16   0     1T  0 disk
└─36001405f091d90da55e450e8dd2d4a54 253:0    0     1T  0 mpath
sdc                                   8:32   0     1T  0 disk
└─36001405f091d90da55e450e8dd2d4a54 253:0    0     1T  0 mpath
sdd                                   8:48   0     1T  0 disk
└─36001405f091d90da55e450e8dd2d4a54 253:0    0     1T  0 mpath

3)创建挂载目录,格式化映射磁盘(此过程时间较长,至于格式化什么样文件系统 ,根据自己喜好)
[root@client-152 ~]# mkdir /mnt/sqlserver
[root@client-152 ~]# chmod 777 /mnt/sqlserver
[root@client-152 ~]# mkfs.xfs /dev/mapper/36001405f091d90da55e450e8dd2d4a54
meta-data=/dev/mapper/36001405f091d90da55e450e8dd2d4a54 isize=512    agcount=4, agsize=67108864 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=268435456, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=131072, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@client-152 ~]# mount /dev/mapper/36001405f091d90da55e450e8dd2d4a54  /mnt/sqlserver/  -o rw
[root@client-152 ~]# df
Filesystem                                     1K-blocks     Used  Available Use% Mounted on
/dev/sda4                                      967378428 61627068  905751360   7% /
devtmpfs                                         8066888        0    8066888   0% /dev
tmpfs                                            8078752        0    8078752   0% /sys/fs/cgroup
/dev/sda2                                         487634   134096     323842  30% /boot
/dev/sda1                                         204580     9956     194624   5% /boot/efi
tmpfs                                            1615752        0    1615752   0% /run/user/0
/dev/mapper/36001405f091d90da55e450e8dd2d4a54 1073217536    32944 1073184592   1% /mnt/sqlserver

3.安装sql server服务
http://www.linuxidc.com/Linux/2017-12/149609.htm

系统需求:
CentOS7.3以上,我目前用的是CenOS7.4 
服务器至少3.25GB内存 
好像对CPU没有什么要求,我在虚拟机中配置的CPU为一核
一、安装 SQL Server
1、下载 Microsoft SQL Server Red Hat 存储库配置文件:
[root@CentOS7 ~]# curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
2、运行以下命令,安装 SQL Server:
[root@CentOS7 ~]# yum update
[
[root@CentOS7 ~]# yum install -y mssql-server
3、运行包安装完成后mssql-conf 安装并按照提示操作以设置 SA 密码,并选择你的版本。
root@CentOS7 ~]# /opt/mssql/bin/mssql-conf setup
选择 SQL Server 的一个版本:
 
  1) Evaluation (免费,无生产许可,180 天限制)
 
  2) Developer (免费,无生产许可)
 
  3) Express (免费)
 
  4) Web (付费版)
 
  5) Standard (付费版)
 
  6) Enterprise (付费版)
 
  7) Enterprise Core (付费版)
 
  8) 我通过零售渠道购买了许可证并具有要输入的产品密钥。

可在以下位置找到有关版本的详细信息:

https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x804

使用此软件的付费版本需要通过以下途径获取单独授权
M
Microsoft 批量许可计划。
选择付费版本即表示你具有适用的
要安装和运行此软件的就地许可证数量。

输入版本(1-8): 1
为了测试该版本数据库的全部功能,我这里选择的是 1Evaluation版本,如果不是为了测试的话,可以选择2Developer 或者 3 Express这二个版本。如果你是购买了正式版序列号的用户,可以根据情况选择4-8的各个版本。
然后系统会提示你是否同意许可条款,当然输入yes了
可以在以下位置找到此产品的许可条款:
/
/usr/share/doc/mssql-server 或从以下位置下载:

https://go.microsoft.com/fwlink/?LinkId=855864&clcid=0x804

可以从以下位置查看隐私声明:

https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x804

接受此许可条款吗? [Yes/No]:yes
下面是选择语言:
选择 SQL Server 的语言:
(
(1) English
(
(2) Deutsch
(
(3) Español
(
(4) Français
(
(5) Italiano
(
(6) 日本語
(
(7) 한국어
(
(8) Português
(
(9) Русский
(
(10) 中文 – 简体
(
(11) 中文 (繁体)
输入选项 1-11:10
这个不用说了吧,选择10
接下来设置SQL密码,输入二次。 
请确保为 SA 帐户指定强密码(最少 8 个字符,包括大写和小写字母、十进制数字和/或非字母数字符号):
输入 SQL Server 系统管理员密码:
(注:这里输入密码时候如果不是很确认最好复制下来粘贴进去!)
确认 SQL Server 系统管理员密码:
在安装的最后,系统会提示如下:
正在配置 SQL Server...

C
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /usr/lib/systemd/system/mssql-server.service.
安装程序已成功完成。SQL Server 正在启动。
4、配置完成后,请验证服务是否正在运行:
[root@CentOS7 ~]# systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
 
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2017-10-05 14:19:18 CST; 21s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
 
 Main PID: 1208 (sqlservr)
 
   CGroup: /system.slice/mssql-server.service
           ├─1208 /opt/mssql/bin/sqlservr
 
           └─1228 /opt/mssql/bin/sqlservr
.
............
(以下进行省略)
如果运行结果如上(●正常是绿颜色的)就是服务正常运行了。 
5、若要允许远程连接,请打开防火墙上的 SQL Server 端口。 
默认的 SQL Server 端口为 TCP 1433。 如果你使用FirewallD防火墙,可以使用以下命令添加规则:
[root@CentOS7 ~]# firewall-cmd --zone=public --add-port=1433/tcp --permanent
success
[root@CentOS7 ~]# firewall-cmd --reload
success
当然如果你的服务器前端是有防火墙进行保护的,也可以不用运行上述命令,而是直接将系统的防火墙关闭。使用如下命令关闭firewallD防火墙并设置为开机不自动启动:
[root@CentOS7 ~]# systemctl stop firewalld

[
[root@CentOS7 ~]# systemctl disable firewalld
R
Removed symlink /etc/systemd/system/dbus-org.Fedoraproject.FirewallD1.service.
R
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
以上就完成了SQL Server 2017的安装
二、安装 SQL Server 命令行工具
以下步骤安装 SQL Server 命令行工具: sqlcmd和bcp。
1、下载安装源。
[root@CentOS7 ~]# curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
2、安装mssql 工具与 unixODBC 开发人员包
[root@CentOS7 ~]# yum update
[
[root@CentOS7 ~]# yum install -y mssql-tools unixODBC-devel
安装之前系统会提示你必须同意相关许可,注意:需要输入大写的YES
The license terms for this product can be downloaded from
https://aka.ms/odbc131eula and found in
/
/usr/share/doc/msodbcsql/LICENSE.TXT . By entering 'YES',
y
you indicate that you accept the license terms.

D
Do you accept the license terms? (Enter YES or NO)
Y
YES
 
  正在安装    : msodbcsql-13.1.9.1-1.x86_64                                      3/5
T
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746949 and found in
/
/usr/share/doc/mssql-tools/LICENSE.txt . By entering 'YES',
y
you indicate that you accept the license terms.

D
Do you accept the license terms? (Enter YES or NO)
Y
YES
.
.............
(以下进行省略)
3、添加/opt/mssql-tools/bin/到环境变量
[root@CentOS7 ~]# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
[
[root@CentOS7 ~]# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
[
[root@CentOS7 ~]# source ~/.bashrc

配置sql server

https://blog.51cto.com/ultrasql/2152021?source=dra

这里要注意的是:
1)创建默认数据及日志路径,并修改合适权限
[root@client-152 yum.repos.d]# mkdir /mnt/sqlserver/data
[root@client-152 yum.repos.d]# mkdir /mnt/sqlserver/log
[root@client-152 yum.repos.d]# mkdir /mnt/sqlserver/backup
[root@client-152 yum.repos.d]# mkdir /mnt/sqlserver/audit

[root@client-152 yum.repos.d]# chown mssql:mssql -R  /mnt/sqlserver/
[root@client-152 yum.repos.d]# ll /mnt/sqlserver/
total 0
drwxr-xr-x 2 mssql mssql 6 Mar 27 15:20 data
drwxr-xr-x 2 mssql mssql 6 Mar 27 15:20 log
[root@client-152 yum.repos.d]# chmod  777 -R /mnt/sqlserver
[root@client-152 yum.repos.d]# ll /mnt/sqlserver/
total 0
drwxrwxrwx 2 mssql mssql 6 Mar 27 15:20 data
drwxrwxrwx 2 mssql mssql 6 Mar 27 15:20 log

2)设置存储路径
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /mnt/sqlserver/data/
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /mnt/sqlserver/log/
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
[root@client-152 yum.repos.d]#

3)创建master数据库数据及log文件,(注,这里是文件,不是目录)

[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.masterdatafile /mnt/sqlserver/master.mdf
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.masterlogfile /mnt/sqlserver/mastlog.ldf
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.

修改默认错误日志目录位置
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.errorlogfile /mnt/sqlserver/log/errorlog
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.

修改默认备份目录位置
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /mnt/sqlserver/backup
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.

修改审计日志目录
[root@client-152 yum.repos.d]# /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /mnt/sqlserver/audit
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.

【或直接修改配置文件如下
[root@client-152 mssql]# cat mssql.conf
[EULA]
accepteula = Y

[filelocation]
defaultdatadir = /mnt/sqlserver/data/
defaultlogdir = /mnt/sqlserver/log/
masterdatafile = /mnt/sqlserver/master.mdf
masterlogfile = /mnt/sqlserver/mastlog.ldf
errorlogfile = /mnt/sqlserver/log/errorlog
defaultbackupdir = /mnt/sqlserver/backup

[telemetry]
userrequestedlocalauditdirectory = /mnt/sqlserver/audit


4)停止数据库服务,移动当前数据文件到创建路径后启动
[root@client-152 yum.repos.d]# systemctl stop mssql-server
[root@client-152 yum.repos.d]# systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Wed 2019-03-27 15:28:56 CST; 7s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
  Process: 29255 ExecStart=/opt/mssql/bin/sqlservr (code=exited, status=0/SUCCESS)
 Main PID: 29255 (code=exited, status=0/SUCCESS)

[root@client-152 yum.repos.d]# mv /var/opt/mssql/data/master.mdf /mnt/sqlserver/master.mdf
[root@client-152 yum.repos.d]# mv /var/opt/mssql/data/mastlog.ldf /mnt/sqlserver/mastlog.ldf
[root@client-152 yum.repos.d]# ll /mnt/sqlserver/
total 5376
drwxrwxrwx 2 mssql mssql       6 Mar 27 15:20 data
drwxrwxrwx 2 mssql mssql       6 Mar 27 15:20 log
-rw-r----- 1 mssql mssql 4194304 Mar 27 15:28 master.mdf
-rw-r----- 1 mssql mssql 1310720 Mar 27 15:28 mastlog.ldf


[root@client-152 yum.repos.d]# systemctl start mssql-server
[root@client-152 yum.repos.d]# systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-03-27 15:31:04 CST; 1s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
 Main PID: 8537 (sqlservr)

好了 ,到这里主要的数据存储目录都已经挂载至ceph集群了,剩下的核心转储等如有需要自行配置

5)使用数据库
Password1
[root@client-152 log]# sqlcmd -S 127.0.0.1 -U SA -P Password1

1> create database testttt
2> go
1> use testttt
2> go
Changed database context to 'testttt'.
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
testttt

(5 rows affected)
1> create table emp(id int,name nvarchar(50))
2> go
1> insert into emp values(1001,'jerry') ;insert into emp values(1002,'loki')
2> go

(1 rows affected)

(1 rows affected)
1> select * from emp;
2> go
id          name
----------- --------------------------------------------------
       1001 jerry
       1002 loki

(2 rows affected)
1>exec sp_tables (查询所有表)

存储,批量创建脚本,注(其中批量创建库会失败,有大佬知道的话请不吝指教)

# -*- coding:utf-8 -*-

import pymssql
import sys

class MSSQL:
    def __init__(self,host,user,pwd,db):
        self.host = host
        self.user = user
        self.pwd = pwd
        self.db = db

    def __GetConnect(self):
        if not self.db:
            raise(NameError,"没有设置数据库信息")
        self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
        cur = self.conn.cursor()
        if not cur:
            raise(NameError,"连接数据库失败")
        else:
            return cur

    def ExecQuery(self,sql, cur):
        cur = self.__GetConnect()
        cur.execute(sql)
        resList = cur.fetchall()

        #self.conn.close()
        return resList

    def ExecNonQuery(self,sql):
        cur = self.__GetConnect()
        cur.execute(sql)
        self.conn.commit()
        #self.conn.close()

    def Close(self):
        self.conn.close()

ms = MSSQL(host="192.168.100.152",user="SA",pwd="Password1",db="cephdb")

def dect(func):
    def wrapper(*args, **kwargs):
        oldt = time.time()
        func(*args, **kwargs)
        costt = time.time() - oldt
        print ("Costed %s for func!" % str(costt))
    return wrapper

def create_db(name, num):
    for i in range(int(num)):
        name = name + str(i)
        ms.ExecNonQuery("create database %s" % name)
        ms.Close()
@dect
def create_table(name, num):
    for i in range(num):
        nname = name + str(i)
        ms.ExecNonQuery("IF OBJECT_ID('%s', 'U') IS NOT NULL DROP TABLE %s CREATE TABLE %s (id INT NOT NULL, name VARCHAR(100), salesrep VARCHAR(100), PRIMARY KEY(id))" % (nname, nname, nname))
        #ms.ExecNonQuery("INSERT INTO %s VALUES (%d, %s, %s)" %nname,[(1, 'DEV John Smith', 'TEST John Doe'),(2, 'Jane Doe', 'Joe Dog'),(3, 'Mike T.', 'Sarah H.')])
        ms.ExecNonQuery("insert into %s values(1,'apple','TEST xJohn Doe')" % nname)
        ms.ExecNonQuery("insert into %s values(2,'orange','TEST zJohn Doe')" % nname)
        ms.ExecNonQuery("insert into %s values(3,'orange','TEST dJohn Doe')" % nname)
        ms.Close()
        i += 1
    print ("Create %d tables named  %s(1-%d) !" % (num, name, num))
@dect
def inst_data(name, num):
    for i in range(4,int(num)):
        ms.ExecNonQuery("insert into %s values(%d,'apple %d','TEST xJohn DO %d')" % (name, i, i ,i))
        i += 1
    ms.Close()


def query(table, times):
    for i in range(int(times)):
        tables = table + str(i)
        ms.ExecQuery('SELECT * FROM %s WHERE id={0}'.format(3) % tables)

def main():
    ms = MSSQL(host="192.168.100.152",user="SA",pwd="Password1",db="testttt")
    reslist = ms.ExecQuery("select * from webuser")
    for i in reslist:
       print (i)

    newsql="update webuser set name='%s' where id=1"%u'测试'
    print (newsql)
    ms.ExecNonQuery(newsql.encode('utf-8'))


if __name__ == "__main__":
    name = sys.argv[1]
    count = int(sys.argv[2])
    try:
        fuc = sys.argv[3]
    except IndexError  as e:
        fuc = ""
    if fuc == "table":
        create_table(name, count)
    elif fuc == "data":
        inst_data(name, count)
    else:
        print ("Wrong args input!")
        print ("Usage: python mysql.py  tb  1000 table  to create 1000 table named tb(1-1000)")
        print ("       python mysql.py  tb  1000 data   to insert 1000 data to tb")

猜你喜欢

转载自blog.csdn.net/pansaky/article/details/88850431
今日推荐